私は2d描画にGraphicsContextを使用しています。いくつかの操作では、私は個々のピクセルを編集する必要があります。しかし、何か不思議なことが起こっている、私のピクセルが保持されません必要があります。赤い矩形を半透明に描画します - 赤は1(255)に設定し、透明度を0.5(128)に設定します。後でピクセルを読み込むと、赤は128(値の半分)、アルファは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]);
}
あなたのアルファが画像にレンダリングされているときにアルファが事前に乗算されているように見えますが(理由はわかりませんが)あなたは 'CGContextBeginTransparencyLayer'を使ってアルファブレンドされたコンテンツを描画することができますが、あなたのコードはちょうどうまくいくと思っていたでしょう:( – deanWombourne