2007年7月4日水曜日

NSViewからNSVIewへのトランジションをCoreImageで/ 4

追記(2008/10/06): サンプルプロジェクトを作った.エントリーと異なる部分もあるが許してください.


Filter設定部
ここではページめくりのトランジション.

@class CIImage;
@class CIFilter;

@interface Transition : NSObject {

CIImage *_inputShadingImage;
CIFilter *_transitionFilter;

}
@end
@implementation Transition

- (void)start {
[self createTransitionFilter];

//アニメーションのスタート 5を参照
}
- (void)createTransitionFilter {
[_transitionFilter release];
_transitionFilter = nil;
NSRect rect = [_delegate bounds];
_transitionFilter = [[CIFilter filterWithName:@"CIPageCurlTransition"] retain];
[_transitionFilter setDefaults];
[_transitionFilter setValue:_initialImage forKey:@"inputImage"];
[_transitionFilter setValue:_finalImage forKey:@"inputTargetImage"];
[_transitionFilter setValue:_initialImage forKey:@"inputBacksideImage"];
[_transitionFilter setValue:_inputShadingImage forKey:@"inputShadingImage"];
[_transitionFilter setValue:[NSNumber numberWithFloat:M_PI_4] forKey:@"inputAngle"];
[_transitionFilter setValue:[CIVector vectorWithX:rect.origin.x Y:rect.origin.y Z:rect.size.width W:rect.size.height] forKey:@"inputExtent"];
}

@end


"_inputShadingImage"にいれる画像だがよくわからないが表現上大切らしい.
Core Image Fun Houseの画像から転用してみてはどうだろう.とりあえず用意してリソースからゲットしてみる.
    NSBundle *bundle = [NSBundle mainBundle];
NSData *shadingBitmapData = [NSData dataWithContentsOfFile:[bundle pathForResource:@"restrictedshine" ofType:@"tiff"]];
_inputShadingImage = [[[NSBitmapImageRep alloc] initWithData:shadingBitmapData] autorelease];

0 件のコメント: