iOS UIImage alpha未被正确检测到

时间:2012-12-28 05:03:06

标签: ios

下面的代码循环遍历图像的像素并获取每个像素的alpha值。如果alpha为零,则会在x,y坐标处创建一个红点。以下是具有透明背景的2张图像。第一个是字母“C”的图像,并且在绘制红点时存在失真。第二个是字母“D”的图像,它工作得很好,红点正好放在alpha等于零的位置。有没有人知道为什么在扭曲的图案中检测到一个图像的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];

0 个答案:

没有答案