ツールキットに依存するライブラリ (CIImage など) をあまり使用せずに、いくつかの変数に基づいて NSImage ピクセルの色を変更したいと考えています。そのため、後でピクセル操作アルゴリズムに集中して、プラットフォームに依存しないようにすることができます。
私のアプローチは、NSImage をサブクラス化し、属性を追加することでした
NSBitmapImageRep *originalImage;
開始中、私は次のことを行います。
-(id) initWithContentsOfFile:(NSString *)fileName
{
if([super initWithContentsOfFile:fileName]){
NSRect rect = NSMakeRect(0.0, 0.0, self.size.width, self.size.height);
[self lockFocus];
originalImage = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
[self unlockFocus];
}
return self;
}
画像を更新しようとすると、次のようになります。
-(void) updateWithVariables:...
{
NSInteger width = [originalImage pixelsWide];
NSInteger height = [originalImage pixelsHigh];
NSInteger count = width * height * 4;
unsigned char *bytes = (unsigned char *)calloc(count, sizeof(unsigned char));
// bytes manipulation
NSBitmapImageRep* newImg = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&bytes
pixelsWide:width
pixelsHigh:height
bitsPerSample:[originalImage bitsPerSample]
samplesPerPixel:[originalImage samplesPerPixel]
hasAlpha:TRUE
isPlanar:[originalImage isPlanar]
colorSpaceName:[originalImage colorSpaceName]
bitmapFormat:[originalImage bitmapFormat]
bytesPerRow:[originalImage bytesPerRow]
bitsPerPixel:[originalImage bitsPerPixel]];
while([[self representations] count] > 0){
NSBitmapImageRep *rep = [[self representations] objectAtIndex: 0];
[self removeRepresentation:rep];
}
[self addRepresentation:newImg];
[newImg release];
}
でも、イメージは変わりません。新しい画像を描画するために、表現を使用する必要があるか、含まれている NSImageView をコンテキストに変更する必要があるかどうかはわかりません。
ありがとう!