私はいくつかのピクセルレベルの画像操作を行うOSXアプリケーションに取り組んでいます。私は、次のコードを使用して、ピクセルカラーコンポーネント(RGBA)にアクセスします。通常のバイトはuint8ポインタとしてキャストされます。に表示される時間であるオリジナルCGImageRef
に影響を(持っているように見えていないメモリのこの領域を変更するCGImageRefの基礎となるバイトにアクセスして変更しますか?
for (int i = 0; i < [data length]; i += 4) { ... }
:この時点で
NSImage *image = self.iv.image;
NSRect imageRect = NSMakeRect(0, 0, image.size.width, image.size.height);
CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:NULL hints:nil];
NSData *data = (NSData *)CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(cgImage)));
uint8 *pixels = (uint8 *)[data bytes];
は、私は、いくつかのバイトレベルの変更を適用します
NSImageView
)。私はそれに応じて画像の更新を確認するために、次の操作を行う必要があります。つまり
CGImageRef newImageRef = CGImageCreate (width,
height,
bitsPerComponent,
bitsPerPixel,
bytesPerRow,
colorspace,
bitmapInfo,
provider,
NULL,
false,
kCGRenderingIntentDefault);
NSSize size = NSMakeSize(CGImageGetWidth(newImageRef),
CGImageGetHeight(newImageRef));
NSImage * newIm = [[NSImage alloc] initWithCGImage:newImageRef size:size];
self.iv.image = newIm;
は、私は変更する取り戻すバイトはおそらくCGDataProviderCopyData(CGImageGetDataProvider(cgImage)
の結果として、元バイトの単なるコピーです。
私の質問は以下の通りです。 CGImageRefの基礎となるバイトに直接アクセスする方法はありますか?私はそれらを変更すると、画像を操作しながら画面上で更新されるようになりますか?