2011-07-16 1 views
1

NSImageをガンマ値1.8に変換しようとしていますが、私は大したことはありません。私はいくつかのコードが見つかりましたが、何も動作していません。 NSBitmapImageRepをNSImageカテゴリに返すメソッドがあります。NSImageに1.8のガンマを適用します。

まず私は、私がオンラインで見つけるCGColorSpaceCreateCalibratedRGB機能付きカラースペースを変更しようとしたが、これは効果がありませんでした:

- (NSBitmapImageRep *)OnePointEightBitmapImageRep{ 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateCalibratedRGB(
                   (CGFloat[3]){0.9505, 1.0000, 1.0891},//white point 
                   (CGFloat[3]){0.0000, 0.0000, 0.0000},//black point 
                   (CGFloat[3]){1.8010, 1.8010, 1.8010},//gamma rgb 
                   (CGFloat[9]){0.4543, 0.2426, 0.0148, 0.3533, 0.6744, 0.0904, 0.1566, 0.0834, 0.7195} //rgb tristimulus 
                   ); 

    CGImageRef imageRef = CGImageCreateCopyWithColorSpace([self CGImage], colorSpace); 
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:imageRef]; 

    CGColorSpaceRelease(colorSpace); 
    CGImageRelease(imageRef); 

    return bitmap; 
} 

- (CGImageRef)CGImage{ 
    return [self CGImageForProposedRect:nil context:nil hints:nil]; 
} 

次の私は、ビットマップ画像の性質上、ガンマを設定してみました:

- (NSBitmapImageRep *)OnePointEightBitmapImageRep{ 
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:[self CGImage]]; 
    NSLog(@"gamma: %@", [bitmap valueForProperty:NSImageGamma]); 

    [bitmap setProperty:NSImageGamma withValue:[NSNumber numberWithDouble:1.8f]]; 
    NSLog(@"gamma: %@", [bitmap valueForProperty:NSImageGamma]); 

    return bitmap; 
} 

これはプロパティを設定しますが、出力イメージには影響しません。

これを行う方法はありますか?

+0

イメージをどのように出力していますか? –

+0

このように: 'NSData * data = [ビットマップ表現型:NSPNGFileTypeプロパティ:nil]; [data writeToFile:@ " /image.png"アトミック:YES]; ' – keegan3d

答えて

1

the docsより:

ガンマ値が0.0 は黒であり、かつ1.0は最大色であると、0.0と1.0の間の浮動小数点数です。

ご覧のとおり、1.8の値はこの範囲外です。このプロパティを設定すると、PNGファイルにプロパティを書き込むことによって、PNGイメージのガンマのみが設定されることに注意してください。実際には画像内のピクセル値は変更されません。

これを行うには、Core Imageを使用し、CIGammaAdjustフィルタを適用する必要があります。

+0

「CIGammaAdjust」はトリックをしました、ありがとう! – keegan3d

関連する問題