Objective-C: NSBitmapImageRep SetColor
Я пытаюсь прочитать NSImage в NSBitmapImageRep, для изменения цвета некоторых пикселей. Программа должна прочитать значение цвета каждого пикселя и проверить, соответствует ли он цвету, выбранному цветовой ячейкой. У меня есть ImageView с именем "MainImageView" и ColorWell с именем "MainColor". Это мой код:
- (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;
}
Но Код ничего не меняет на картинке! В чем проблема? Или есть другой способ изменить цвет пикселя?
Спасибо за помощь! дари
1 ответ
У меня такая же проблема. Обходной путь, который я нашел, состоит в том, чтобы использовать метод -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.
Но, в конце концов, это все же лучше, чем копирование и изменение базовых (unsigned char*) данных, которые возвращаются [ImgRep bitmapData] ...