Cocos2d x Sprite如何在cocos2dx中以编程方式进行修剪?
图像可以是透明像素。 在没有透明像素的情况下,如何获得适合此图像的矩形的最小大小? 我想得到这样的东西:Cocos2d x Sprite如何在cocos2dx中以编程方式进行修剪?,cocos2d-x,Cocos2d X,图像可以是透明像素。 在没有透明像素的情况下,如何获得适合此图像的矩形的最小大小? 我想得到这样的东西: cocos2d::Rect getBoundingBoxTrim(cocos2d::Sprite* sprite); 也许你不会给我一个答案,但至少有一些提示。我将非常感谢您。这只是一个基本的例子。您必须自定义它 Image* img = new Image(); img->initWithImageFile("my file.png"); 然后迭代图像中的每个
cocos2d::Rect getBoundingBoxTrim(cocos2d::Sprite* sprite);
也许你不会给我一个答案,但至少有一些提示。我将非常感谢您。这只是一个基本的例子。您必须自定义它
Image* img = new Image();
img->initWithImageFile("my file.png");
然后迭代图像中的每个像素,确定图像边界处的哪些像素是不透明的,并使用该像素计算矩形
int leftMost;
int rightMost;
int upperMost;
int lowerMost;
unsigned char *data = new unsigned char[img->getDataLen()*x];
data = img->getData();
for(int i=0;i<img->getWidth();i++)
{
for(int j=0;j<img->getHeight();j++)
{
unsigned char *pixel = data + (i + j * img->getWidth()) * x;
// You can see/change pixels' RGBA value(0-255) here !
// unsigned char r = *pixel;
// unsigned char g = *(pixel + 1);
// unsigned char b = *(pixel + 2) ;
unsigned char a = *(pixel + 3);
if (a>0){
// this pixel is opaque. You can use a different threshold for transparency besides 0, depending on how transparent you won't to consider as "transparent".
//Complete yourself:
if(i<leftMost){
leftMost = i;
}
if(i> rightMost){
rightMost = i;
}
if(j> upperMost){
upperMost = j;
}
if(j< lowerMost){
lowerMost = j;
}
}
}
}
int最左边;
int最右边;
int最上面;
int最低;
unsigned char*data=新的unsigned char[img->getDataLen()*x];
data=img->getData();
对于(int i=0;igetWidth();i++)
{
对于(int j=0;jgetHeight();j++)
{
无符号字符*pixel=data+(i+j*img->getWidth())*x;
//您可以在此处查看/更改像素的RGBA值(0-255)!
//无符号字符r=*像素;
//无符号字符g=*(像素+1);
//无符号字符b=*(像素+2);
无符号字符a=*(像素+3);
如果(a>0){
//这个像素是不透明的。除了0之外,您可以使用不同的透明度阈值,这取决于您不认为透明的透明度。
//完成你自己:
如果(i最右边){
最右边=i;
}
如果(j>最上方){
最高=j;
}
if(j<最下面的){
最低=j;
}
}
}
}
在“完成自己”部分中,您只需跟踪第一个/最后一个不透明像素所在的边界。
你需要四个变量,每边一个
在循环结束时,您只需使用四个点作为矩形的边创建一个矩形
如果这解决了您的问题,请将其标记为正确。这只是一个基本示例。您必须自定义它
Image* img = new Image();
img->initWithImageFile("my file.png");
然后迭代图像中的每个像素,确定图像边界处的哪些像素是不透明的,并使用该像素计算矩形
int leftMost;
int rightMost;
int upperMost;
int lowerMost;
unsigned char *data = new unsigned char[img->getDataLen()*x];
data = img->getData();
for(int i=0;i<img->getWidth();i++)
{
for(int j=0;j<img->getHeight();j++)
{
unsigned char *pixel = data + (i + j * img->getWidth()) * x;
// You can see/change pixels' RGBA value(0-255) here !
// unsigned char r = *pixel;
// unsigned char g = *(pixel + 1);
// unsigned char b = *(pixel + 2) ;
unsigned char a = *(pixel + 3);
if (a>0){
// this pixel is opaque. You can use a different threshold for transparency besides 0, depending on how transparent you won't to consider as "transparent".
//Complete yourself:
if(i<leftMost){
leftMost = i;
}
if(i> rightMost){
rightMost = i;
}
if(j> upperMost){
upperMost = j;
}
if(j< lowerMost){
lowerMost = j;
}
}
}
}
int最左边;
int最右边;
int最上面;
int最低;
unsigned char*data=新的unsigned char[img->getDataLen()*x];
data=img->getData();
对于(int i=0;igetWidth();i++)
{
对于(int j=0;jgetHeight();j++)
{
无符号字符*pixel=data+(i+j*img->getWidth())*x;
//您可以在此处查看/更改像素的RGBA值(0-255)!
//无符号字符r=*像素;
//无符号字符g=*(像素+1);
//无符号字符b=*(像素+2);
无符号字符a=*(像素+3);
如果(a>0){
//这个像素是不透明的。除了0之外,您可以使用不同的透明度阈值,这取决于您不认为透明的透明度。
//完成你自己:
如果(i最右边){
最右边=i;
}
如果(j>最上方){
最高=j;
}
if(j<最下面的){
最低=j;
}
}
}
}
在“完成自己”部分中,您只需跟踪第一个/最后一个不透明像素所在的边界。
你需要四个变量,每边一个
在循环结束时,您只需使用四个点作为矩形的边创建一个矩形
如果这解决了您的问题,请将其标记为正确