2007年12月8日土曜日

CIFilterのサンプルをつくる.

トランジションでやったのでサンプル的にシンプルなことをやろうと思って作り始めた.
が,CIImageからNSImageの作り方って?みたいなところではまってた.

10.5からはNSBitmapImageRepinitWithCIImage:が付いたということでこれを使ってみた.
とりあえず"BoxBlur".



サンプル (10.5用)
http://y30.net/pg/cocoa_prj/CIFilter_Blur.zip



NSImage* inImage= [[NSImage alloc]
initWithContentsOfFile:@"/Library/Desktop Pictures/Nature/Earth.jpg"];
NSBitmapImageRep* inBitmap= [NSBitmapImageRep imageRepWithData:[inImage TIFFRepresentation]];
[inImage release];

CIImage *inCIImage= [[CIImage alloc] initWithBitmapImageRep:inBitmap];
[inBitmap release];

CIFilter* _blurFilter= [CIFilter filterWithName:@"CIBoxBlur"];
[_blurFilter setDefaults];
[_blurFilter setValue:[NSNumber numberWithInt:20] forKey:@"inputRadius"];

[_blurFilter setValue:inCIImage forKey:@"inputImage"];
CIImage* outCIImage = [_blurFilter valueForKey:@"outputImage"];

NSBitmapImageRep* outBitmap=[[NSBitmapImageRep alloc] initWithCIImage:outCIImage];
[outCIImage release];
NSImage* outImage= [[NSImage alloc] initWithData:[outBitmap TIFFRepresentation]];


他のCIFilterはこちらを参照ください.
Core Image Filter Reference
http://developer.apple.com/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html


変換はいちいちNSBitmapImageRep経由なのは間違っているからだろうか?
NSImage -> NSBitmapImageRep -> CIImage
CIImage -> NSBitmapImageRep -> NSImage

#教えてエラい人.

ちなみに描画するだけならCIImagedrawAtPoint:fromRect:operation:fraction:を呼べば良いです.

0 件のコメント: