1

以下のコードは、画像のピクセルをループして、各ピクセルのアルファ値を取得します。アルファがゼロの場合、x、y 座標に赤い点が作成されます。以下は、背景が透明な 2 つの画像です。1枚目は文字「C」の画像で、赤い点が描かれているので歪みがあります。2 番目は文字「D」の画像で、完全に正常に機能し、アルファがゼロに等しい場所に赤い点が配置されています。ある画像のアルファが歪んだパターンで検出されているのに、別の画像が完全に検出されている理由を知っている人はいますか? 私はこれを理解するのに本当に苦労しました。私には意味がありません。アドバイスをよろしくお願いします!!!

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