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;
}
}
}
}
在“完成自己”部分中,您只需跟踪第一个/最后一个不透明像素所在的边界。 你需要四个变量,每边一个

在循环结束时,您只需使用四个点作为矩形的边创建一个矩形

如果这解决了您的问题,请将其标记为正确