質問

ピクセルあたり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 でなければなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top