1

下面的代码循环遍历图像的像素并获取每个像素的 alpha 值。如果 alpha 为零,则会在 x,y 坐标处创建一个红点。以下是 2 张具有透明背景的图像。第一个是字母“C”的图像,绘制红点时出现失真。第二个是字母“D”的图像,它工作得非常好,红点正好放置在 alpha 等于 0 的位置。有谁知道为什么一个图像的 alpha 以扭曲的模式被检测到,而另一个图像被检测到非常好?我真的一直在努力解决这个问题。对我来说完全是无稽之谈。提前感谢您的任何建议!!!

C 有问题 --> http://i45.tinypic.com/rtdyet.png

D 工作得很好 --> http://i45.tinypic.com/21mb3om.png

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];
4

0 回答 0