Objective-C:NSBitmapImageRep SetColor

标签 objective-c xcode macos pixel nsbitmapimagerep

我正在尝试将 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;

}

但是代码在图片上没有任何改变!有什么问题?还是有另一种方法来改变像素的颜色?

感谢您的帮助! 大日

最佳答案

我也有同样的问题。我找到的解决方法是使用 -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*)数据要好......

关于Objective-C:NSBitmapImageRep SetColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487374/

相关文章:

html 未针对 ios 设备适当缩放

ios - 为什么此代码在 64 位构建上表现不同? (iOS/UIColor/UIKeyedArchiver)

xcode - UICollectionView reloadItemsAtIndexPaths

linux - 描述 xmm 寄存器中未传递给 rax 的浮点参数数量的整数

java - 在不设置类路径的情况下执行java程序

objective-c - 屏幕保护程序中的生涩/抖动(核心)动画?

ios - 我的 Storyboard 包含我的观点吗?

cocoa - 显示模态 NSWindow,而不激活其他应用程序窗口

ios - 2个imageView ios的碰撞

python - 如何使用 Mac 终端在我的服务器上托管本地主机?