我正在尝试将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;
}
但是代码对图片没有任何改变!怎么了?或者还有其他方法,改变像素的颜色?
谢谢你的帮助!DaRi
我也有同样的问题。我找到的一个变通方法是使用-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,0255在RGBA颜色空间中为黑色。
但最终,这仍然比复制和修改[ImgRep bitmapData]返回的底层(无符号char*)数据要好。。。