3

alphablend関数を使用して画像の特定の部分を透明にすることは可能ですか?

RGB(0,0,255)で特定の領域を含む画像を作成できますか?その画像を描画すると、その領域のみが透明になるはずです.AlphaBlend関数で可能ですか? はい、ではどうやって?

alphablend について読んでいましたが、まだ明確ではありません。画像の作成中にアルファチャンネルを指定する必要があると思います。特定のピクセルにアルファチャンネルが存在しない場合、そのピクセルを透明にすることはできませんか?

4

3 に答える 3

6

画像の作成中にアルファチャンネルを指定する必要があると思います。特定のピクセルにアルファチャンネルが存在しない場合、そのピクセルを透明にすることはできませんか?

はい、このAlphaBlend関数は、アルファ チャネル情報が既に保存されている画像を描画することを目的としています。これらは 32 ピクセルあたりのビット数 (bpp) の画像で、赤、緑、青、およびアルファ チャネル情報が含まれていることを意味します。この関数は、画像に含まれる透明または半透明のピクセルを保持する点を除いて、AlphaBlendと同様に考えることができます。BitBlt

この関数の鍵は、BLENDFUNCTION構造体である最後のパラメーターです。ドキュメントには次のように書かれています。

ftn[in]  ソース ビットマップとデスティネーション ビットマップのアルファ ブレンディング関数、ソース ビットマップ全体に適用されるグローバル アルファ値、およびソース ビットマップの形式情報。ソースと宛先のブレンド機能は、現在 に限定されていAC_SRC_OVERます。

つまり、画像には事前に乗算されたアルファチャンネルが既に含まれていると想定されているということです。関数は画像を描画するときにこれらの値を尊重しますが、構造体のメンバーにAlphaBlend0 ~ 255 の値を指定することで不透明度を調整できます。この値を 255 に設定すると、ビットマップのピクセルごとのアルファ値のみが使用されます。0 に設定すると、画像は透明であると見なされます。その中間に設定すると、画像がある程度の半透明で描画されます。SourceConstantAlphaBLENDFUNCTION

alphablend関数を使用して画像の特定の部分を透明にすることは可能ですか?

RGB(0,0,255) の特定の領域を含む画像を作成できますか?その画像を描画すると、その領域のみが透明になります。

あなたがやろうとしていることは(kolendaが示唆しているように)、カラーキーイングと呼ばれるもののように思えます。基本的に、透明にしたい画像のあらゆる場所で特定の色 (RGB(0,0,255) など) を使用し、Windows に透明キーの色として RGB(0,0,255) を使用して画像を描画するように指示します。つまり、元の画像の RGB(0,0,255) であるすべてのピクセルは、描画される画像では透明になります。

はい、可能です。Windows では、ツールバーのボタン アイコンなどによく使われています。一般的に、フクシア色 (RGB(255,0,255)) が使用されます。普通に画像で。

これを担当する関数はTransparentBlt関数です(これも に似ていますBitBltが、同じパターンで名前が付けられています)。これで重要なことは、カラー キー、つまり、画像を描画するときに透明として扱う特定の色を指定できることです。それが最後のパラメータですcrTransparent。あなたの場合、指定したいと思いますRGB(0,0,255)

本当に派手にしたい場合は、TransparentBltとの効果を組み合わせることができますAlphaBlend。基本的には、最初に呼び出しTransparentBltて、すべてのキー カラーを透明として処理する一時的なデバイス コンテキスト (DC) にイメージを描画し、AlphaBlend関数を使用して、その一時的な DC の内容をターゲット DC にブレンドし、透明効果を適用します。あなたが望む。

しかし、これは可能であり、コードを書いて動作させるとちょっとクールですが、RED SOFT ADAIRは、GDI は透明性を考慮して設計されていないと彼が言う点はまだあります。ここで説明する単純な透明効果よりもはるかに先に進むことはできません。また、それを行うのは確かに簡単ではありません。

透過性を使用して非常に多くの描画を行う必要がある場合は、代わりにGDI+ APIに切り替えた方がよいでしょう。これらは透過性のサポートがはるかに優れており、実際には C++ API として設計されているため (C フォールバックはありますが)、クラスに構造化されているため、操作がさらに簡単になります。

GDI+ の唯一の注意点は、Windows XP 以降でのみネイティブにサポートされていることです。クライアントがまだ Windows 2000 以前のバージョンを実行している場合はGdiplus.dll、プログラムを実行するために GDI+ DLL ( ) を再配布する必要があります。それは最近ではますます参入障壁が少なくなってきていますが、それでも考慮に値するものです.

于 2012-07-25T09:19:02.880 に答える
1

WinGdi関数自体ではアルファブレンディングafaictは不可能です。これは、GDI+などの新しいAPIを使用して実行できます。

さまざまなWindowsグラヒックAPIについての概要は、次の場所にあります。

http://msdn.microsoft.com/en-us/library/windows/desktop/ee663279%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop /ee417756%28v=vs.85%29.aspx

透明な描画(指定した色で透明になる)だけが必要な場合は、TransparentBltを使用できます。

于 2012-07-25T08:51:41.573 に答える
1

アルファブレンディングはalpha、透明度データとして別のチャネルがある場合に使用されます。

あなたが探しているのは、おそらくcolor keying特定の色を 1 つとして使用することですtransparent

于 2012-07-25T08:34:23.997 に答える