首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C: NSBitmapImageRep SetColor

Objective-C: NSBitmapImageRep SetColor
EN

Stack Overflow用户
提问于 2015-02-13 04:42:09
回答 1查看 997关注 0票数 2

我正在尝试将NSImage读取到NSBitmapImageRep中,用于更改某些像素的颜色。程序应该读取每个像素的颜色值,并检查它是否等于通过色井选择的颜色。我有一个名为"MainImageView“的ImageView和一个名为"MainColor”的ColorWell。这是我的代码:

代码语言:javascript
复制
- (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

EN

回答 1

Stack Overflow用户

发布于 2015-02-20 07:01:26

我也有同样的问题。我发现的一个变通方法是使用-setPixel方法,尽管这感觉有点笨拙:

代码语言:javascript
复制
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返回的底层(无符号字符*)数据要好……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28487374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档