2007年7月7日土曜日

トランジションをつくろう.

無駄な作業になりそうだが…
すでにあるトランジションフィルタが気に入らなかったので…

フィルタを2つにした.
1.重ねる画像をズームブラーで動きを付ける.
2.背景画像に最小合成で(白を背景にして)合成.

ブラーの具合を時間にあわせて変化させてみた.


@implementation Transition
...
- (void)createTransitionFilter {
{
[_transitionFilter release];
_transitionFilter = nil;
NSRect rect = [_delegate bounds];
_transitionFilter = [[CIFilter filterWithName:@"CIMinimumCompositing"] retain];
[_transitionFilter setDefaults];
[_transitionFilter setValue:_baseImage forKey:@"inputBackgroundImage"];
}
{
[_transitionFilter2 release];
_transitionFilter2 = nil;
NSRect rect = [_delegate bounds];
_transitionFilter2 = [[CIFilter filterWithName:@"CIZoomBlur"] retain];
[_transitionFilter2 setDefaults];
[_transitionFilter2 setValue:_overlayImage forKey:@"inputImage"];
[_transitionFilter2 setValue:[CIVector vectorWithX:NSMidX(rect) Y:NSMidY(rect) Z:0 W:0] forKey:@"inputCenter"];
}
}
- (void)draw:(NSRect)viewRect {
NSRect rect = [_delegate bounds];
float time = [_animation currentValue];
if ([self reverse]) {
time= 1.0 - time;
}
[_transitionFilter2 setValue:[NSNumber numberWithFloat:(time * 50.0)+10] forKey:@"inputAmount"];
[_transitionFilter setValue:[_transitionFilter2 valueForKey:@"outputImage"] forKey:@"inputImage"];
CIImage * outputCIImage = [_transitionFilter valueForKey:@"outputImage"];
[outputCIImage drawInRect:rect fromRect:NSMakeRect(0, rect.size.height, rect.size.width, -rect.size.height) operation:NSCompositeSourceOver fraction:1.0];
}


#すでに目的を見失っている気がする…

0 件のコメント: