未正确检测到iOS UIImage alpha

未正确检测到iOS UIImage alpha,ios,Ios,下面的代码循环遍历图像的像素,并获取每个像素的alpha值。如果alpha为零,则会在x,y坐标处创建一个红点。下面是两幅背景透明的图像。第一个是字母“C”的图像,绘制红点时会出现失真。第二个是字母“D”的图像,它工作得非常好,红色的点正好放在alpha等于零的位置。有人知道为什么一幅图像的阿尔法被检测出扭曲的模式,而另一幅图像被检测到的非常好吗?我一直在努力想办法解决这个问题。这对我来说毫无意义。提前感谢您的建议 C有问题--> D工作得非常好--> CFDataRef data=CGDa

下面的代码循环遍历图像的像素,并获取每个像素的alpha值。如果alpha为零,则会在x,y坐标处创建一个红点。下面是两幅背景透明的图像。第一个是字母“C”的图像,绘制红点时会出现失真。第二个是字母“D”的图像,它工作得非常好,红色的点正好放在alpha等于零的位置。有人知道为什么一幅图像的阿尔法被检测出扭曲的模式,而另一幅图像被检测到的非常好吗?我一直在努力想办法解决这个问题。这对我来说毫无意义。提前感谢您的建议

C有问题-->

D工作得非常好-->

CFDataRef data=CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
UInt8*像素=(UInt8*)CFDataGetBytePtr(数据);
UIGraphicsBeginImageContext(大小);
[image drawInRect:CGRectMake(0,0,size.width,size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(),kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(),1);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(),[UIColor redColor].CGColor);
用于(int x=0;x
您的代码采用32位RGBA像素。你确定每个图像都是这样吗?我所有的图像都是在应用程序中以相同的方式创建的。唯一的区别是图像中绘制的字母。有些图像可以工作(D、J、O、E),但大多数其他图像是扭曲的。大小变量来自哪里?是图像。大小?是的,我正在创建的新图像的大小与我正在扫描像素的图像的大小相同。当我第一次开始测试时,我不知道一些字母是否有效,所以我想我的宽度属性设置不正确,但一旦我发现其他具有不同字母的图像工作正常,我就有点否定了大小可能有问题的想法。但是现在你提到了它,它仍然看起来像宽度没有被正确设置。我会再调查一下。数据长度似乎加起来不正确。如果图像大小为66x236,我希望CFDataGetLength(data)返回66x236x4=62304,但它返回67968。我想这就是我的问题所在,但这毫无意义。
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
UInt8 *pixels = (UInt8 *)CFDataGetBytePtr(data);

UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 1);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [UIColor redColor].CGColor);

for (int x = 0; x < size.width; x++)
{
    for (int y = 0; y < size.height; y++)
    {
        int index = ((x + (y * (int)size.width)) * 4) + 3;
        CGFloat alpha = pixels[index];
        if (alpha == 0)
        {
            CGContextBeginPath(UIGraphicsGetCurrentContext());
            CGContextMoveToPoint(UIGraphicsGetCurrentContext(), x, y);
            CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), x, y);
            CGContextStrokePath(UIGraphicsGetCurrentContext());
        }
    }
}

UIImage *test = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *testView = [[UIImageView alloc] initWithImage:test];
testView.frame = CGRectMake(0, 0, size.width, size.height);
[self.view addSubview:testView];