ページ

2008年10月4日土曜日

波紋(その7)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

試行錯誤中。色の着いた四角をやめ、デジカメの画像に変えた。
それと CoreAnnimationをやめて自分でタイミング取りを行うようにコードを修正した(途中)。

タイミングは NSTimerなどを使って自分で行わなければならないが、とりあえずはその準備までできた。
コードはこんな感じ。

- (void)awakeFromNib
{
NSRect rect = [_view bounds];
NSURL* url0 = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForImageResource:@"shading"]];
NSURL* url1 = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForImageResource:@"buzz"]];
NSURL* url2 = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForImageResource:@"ocha"]];
CIImage* image0 = [CIImage imageWithContentsOfURL:url0];
CIImage* image1 = [CIImage imageWithContentsOfURL:url1];
CIImage* image2 = [CIImage imageWithContentsOfURL:url2];

CIFilter* filter = [CIFilter filterWithName:@"CIRippleTransition"];
[filter setDefaults];
[filter setValue:image0 forKey:kCIInputShadingImageKey];
[filter setValue:image1 forKey:kCIInputImageKey];
[filter setValue:image2 forKey:kCIInputTargetImageKey];

[filter setValue:[CIVector vectorWithX:NSMidX(rect) Y:NSMidY(rect)] forKey:kCIInputCenterKey];
[filter setValue:[CIVector vectorWithX:rect.origin.x Y:rect.origin.y Z:rect.size.width W:rect.size.height] forKey:kCIInputExtentKey];

[filter setValue:[NSNumber numberWithFloat:0.5f] forKey:kCIInputTimeKey];

CIImage *output_image = [filter valueForKey:kCIOutputImageKey];

NSImage* image = [[[NSImage alloc] initWithSize:NSMakeSize([output_image extent].size.width, [output_image extent].size.height)] autorelease];
[image lockFocus];
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CIContext *ci_context = [CIContext contextWithCGContext:context options:nil];
[ci_context drawImage:output_image atPoint:CGPointZero fromRect:[output_image extent]];
[image unlockFocus];

[_view setImage:image];
}


前回までと違うのは CoreAnnimationを使うのをやめたこと。

こんな感じ。