【发布时间】:2015-02-12 20:42:09
【问题描述】:
我正在尝试将 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;
}
但是代码在图片上没有任何改变!有什么问题?还是有其他方法,改变像素的颜色?
感谢您的帮助! 达日
【问题讨论】:
-
我无法想象
[ImgRep colorAtX:pixelx y:pixely] == MainColor.color正在做你认为的事情......那是在比较NSColor对象地址。 -
首先检查
ImgRep是否为nil并且有尺寸。学习使用调试器并设置断点以查看它是否甚至可以到达setColor操作。 -
即使在替换了错误的颜色比较之后它也不起作用,因为现有的 NSBitmapImageRep 无法更改。来自文档:对象将缓冲区中的图像数据视为不可变的,不会尝试更改它。您必须创建一个新图像。
-
是的,代码到了应该设置像素颜色的地步。但我还是修改了比较,在这个 Theard 的帮助下:stackoverflow.com/questions/1592995/…——但它仍然不起作用。 @HeinrichGiesen 不明白,为什么它不起作用。如果您无法更改图像上的任何内容,为什么还要设置颜色方法??
标签: objective-c xcode macos pixel nsbitmapimagerep