0

赤とシアンのバージョンに分割し、それらの間に視差を設定することで、アナグリフを作成するために使用している画像があります。

ソース画像は 1146 x 580 (Retina 解像度) です。CIColorMatrix を使用して各画像を作成しています。赤をすべて削除するシアン バージョンのコードを次に示します。

-(UIImage *)createCyan:(UIImage *)anImage
{

    CIImage *inputImage = [CIImage imageWithCGImage:anImage.CGImage];

    CIFilter *matrixFilter = [CIFilter filterWithName:@"CIColorMatrix"];
    [matrixFilter setDefaults];
    [matrixFilter setValue:inputImage forKey:kCIInputImageKey];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0] forKey:@"inputRVector"];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"];

    CIImage *outputImage = [matrixFilter outputImage];

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 

    return [UIImage imageWithCGImage:cgimg];
}

問題は、この処理に 1 秒以上かかることです。同じことを達成するためのはるかに高速な手段 (存在する場合) を見つける必要があります。

より良い方法はありますか?

4

1 に答える 1