2

一部のピクセルの色を変更するために、NSImage を NSBitmapImageRep に読み込もうとしています。プログラムは、各ピクセルのカラー値を読み取り、それがカラーウェルによって選択された色と等しいかどうかを確認する必要があります。「MainImageView」という名前の ImageView と「MainColor」という名前の ColorWell があります。それが私のコードです:

- (IBAction)ScanImg:(id)sender {

NSBitmapImageRep *ImgRep = [[NSBitmapImageRep alloc]initWithData: MainImageView.image.TIFFRepresentation];

for (int pixelx = 0; pixelx < ImgRep.pixelsWide; pixelx ++) {
    for (int pixely = 0; pixely < ImgRep.pixelsHigh;pixely ++){
        if ([ImgRep colorAtX:pixelx y:pixely] == MainColor.color) {
            [ImgRep setColor: [NSColor whiteColor] atX:pixelx y:pixely];
        } else{
            [ImgRep setColor: [NSColor blackColor] atX:pixelx y:pixely];
        }
    }
}

struct CGImage *CG = [ImgRep CGImage];
NSImage *Image = [[NSImage alloc] initWithCGImage:CG size:ImgRep.size];
MainImageView.image = Image;

}

しかし、コードは画像上で何も変更しません! どうしたの?または、ピクセルの色を変更する別の方法はありますか?

ご協力ありがとうございました!ダリ

4

1 に答える 1

0

同じ問題があります。私が見つけた回避策は、-setPixel メソッドを使用することですが、これは少しぎこちなく感じます。

NSUInteger pix[4]; pix[0] = 0; pix[1] = 0; pix[2] = 0; pix[3] = 255; //black
[ImgRep setPixel:pix atX:x y:y];

注: ピクセル データは、使用している色空間に従って配置する必要があります。この例では、0,0,0,255 は RGBA 色空間の黒です。

しかし、最終的には、[ImgRep bitmapData] によって返される基になる (unsigned char*) データをコピーして変更するよりも優れています ...

于 2015-02-19T23:01:25.907 に答える