Приведенный ниже код проходит через пиксели изображения и получает значение альфа каждого пикселя. Если альфа равна нулю, она создает красную точку в координате x, y. Ниже представлены 2 изображения с прозрачным фоном. Первый - это изображение буквы «C», и при рисовании красных точек происходит искажение. Второй - изображение буквы «D», и он отлично работает, причем красные точки помещаются точно там, где альфа равна нулю. Кто-нибудь знает, почему альфа одного изображения обнаруживается в искаженном шаблоне, а другое изображение обнаруживается совершенно нормально? Я действительно пытался понять это. Это не имеет никакого смысла для меня. Заранее благодарю за любой совет!!!
C has problems -->
http://i45.tinypic.com/rtdyet.png
D works perfectly fine -->
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];