我正在使用GraphicsContext進行2D繪圖。對於我需要編輯個別像素的一些操作。然而,一些奇怪的事情正在發生,我的像素沒有保留,因爲他們應該。我畫紅色矩形,半透明 - 紅色設置爲1(255),透明度爲0.5(128)。當我稍後閱讀像素 - 紅色現在是128(一半的值)和alpha是128(這是正確的)。我想稍後找到值爲255的所有紅色像素,並更改它們,但這是不可能的,因爲它們不保留設置值。這是我的代碼:iPhone RGBA值未正確保存
UIGraphicsBeginImageContextWithOptions(CGSizeMake(widthT, heightT), NO, 1);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
//CGContextSaveGState(contextRef);
CGContextSetRGBFillColor(contextRef, 1, 0, 0, 0.5);
CGContextSetRGBStrokeColor(contextRef, 1, 0, 0, 0.5);
CGContextFillRect(contextRef, CGRectMake(0, 0, 400, 400));
UIImage *imageMoonMask = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//NSData *data = (NSData *)CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
NSData *data = (NSData *)CGDataProviderCopyData(CGImageGetDataProvider(imageMoonMask.CGImage));
Byte *copyPixels = (Byte *)[data bytes];
pixels = (Byte *) malloc([data length] * sizeof (Byte));
for(int i = 0; i < [data length]; i += 4) {
pixels[i] = copyPixels[i];
pixels[i+1] = copyPixels[i+1];
pixels[i+2] = copyPixels[i+2]; //red color
pixels[i+3] = copyPixels[i+3]; //alpha
NSLog(@"Originalni");
NSLog(@"%u", pixels[i]);
NSLog(@"%u", pixels[i+1]);
NSLog(@"%u", pixels[i+2]);
NSLog(@"%u", pixels[i+3]);
}
看起來像你的alpha被渲染到圖像上時被預乘(儘管我不知道爲什麼)。你可以嘗試使用'CGContextBeginTransparencyLayer'繪製alpha混合內容,但是我認爲你的代碼只會工作:( – deanWombourne 2011-12-21 11:25:01