NSImage のアルファ チャネルのクリア
-
21-09-2019 - |
質問
ピクセルあたり32ビットで一時的なビットマップをマロック化し、forループでアルファコンポーネントをクリアし、最後に再びnsimageに戻すことで実行できます。
nscolorと巧妙な組み合わせを使用して、より簡単な方法で行うことができると思います NSCompositingOperation. 。または、おそらく画像をDrawatPointを使用してそれ自体で構成する必要があります。
私のコードは次のようになります。
NSImage* img = some image with RGB and Alpha;
NSRect rect = some rect inside the image;
[img lockFocus];
[[NSColor clearColor] set];
NSRectFillUsingOperation(rect, NSCompositeXOR);
[img unlockFocus];
注記:Alphaチャネルを1に設定すると、NSCompositePluslighterを使用したブラックカラーを使用して実行できます。
アルファチャンネルをクリアする秘訣は何ですか?
解決
はこれは、高速ではありませんが、これも同様に動作します
NSImage *newImage = [[NSImage alloc] initWithSize:[srcImage size]];
[newImage lockFocus];
[[NSColor whiteColor] set];
NSRectFill(NSMakeRect(0,0,[newImage size].width, [newImage size].height));
[srcImage compositeToPoint:NSZeroPoint operation:NSCompositeCopy];
[newImage unlockFocus];
他のヒント
(1) 画像の変更可能性に関する AppKit リリース ノートをお読みください。NSImage は基本的に不変として扱う必要があります。
(2) 全ての グラフィックスコンテキストでサポートされるピクセル形式 持っている 事前乗算されたアルファ. 。アルファ チャネルが 0 の場合、他のチャネルも 0 でなければなりません。
所属していません StackOverflow