Я пытаюсь прочитать NSImage в NSBitmapImageRep для изменения цвета некоторых пикселей. Программа должна считывать значение цвета каждого пикселя и проверять, соответствует ли он цвету, выбранному колорвелл. У меня есть ImageView с именем «MainImageView» и ColorWell с именем «MainColor». Это мой код:Objective-C: NSBitmapImageRep SetColor
- (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
Я не могу себе представить, что '[ImgRep colorAtX: pixelx у: pixely] == MainColor.color' делает то, что вы думаете ... это сравнение адресов объектов NSColor. –
сначала проверьте, является ли 'ImgRep'' nil' и имеет размеры. научитесь использовать отладчик и поместите контрольные точки, чтобы увидеть, даже ли он попадает в операции 'setColor'. –
И даже после замены сравнения цвета багги это не сработает, потому что существующий NSBitmapImageRep нельзя изменить. Из документов: ** Объект обрабатывает данные изображения в буферах как неизменные и не будет пытаться изменить его. ** Вам нужно создать новое изображение. –