こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Windowsプログラミング:BitBltで半透明な透かしを作りたい

Windowsプログラミング:BitBltで半透明な透かしを作りたい

現在透過色を設定して、特定の部分をくりぬく処理はできているのですが、「くりぬいて残った部分をさらに半透明にして描画」という処理がWindowsAPIで実現できなくて困っております。
ご存知の方居られましたらご教授願えれば幸いです。

投稿日時 - 2010-06-06 01:52:23

QNo.5947879

すぐに回答ほしいです

質問者が選んだベストアンサー

AlphaBlend関数を使用するとできます。
例えば以下のサイトを参考にしてください
http://www3.pf-x.net/~chopper/home2/WinAPI/WinGDI19.html

投稿日時 - 2010-06-06 17:43:38

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

過去に似たような事をしたことがありますが
その時はSetDIBitsDevice APIを使いました。BitBltでは無理だと思います。
後ろの画像の画素と、描画しようとする画素を自前でアルファブレンドの計算を行い
そのデータ(配列)をこのAPIで指定します。
色々なPCの環境でも動作させる為には
デスクトップのカラーが24bitなのか32bitなのか16bitなのかを
:GetDeviceCaps( ::GetDC( ::GetDesktopWindow() ), BITSPIXCEL )で
判定し、それに応じてアルファブレンドの計算しました。
そこそこ高速に動くAPIなので、サイズが馬鹿でかくなければ
さくさく表示可能だったと記憶しています。
 ※かなり前の記憶なので後は自力で調べてください。

ただ上記は割と面倒です。
別の方法でGDI+を使えば、より簡単に出来るでしょう。
「猫でもわかる」にGDI+の使用方法のサンプルがあります。
http://homepage2.nifty.com/c_lang/sdk4/sdk_335.htm
この方法を使う場合は
「GDI+ アルファブレンディング」で検索してみてください。

※今回はWinAPIという質問でしたのでDirectXや.Netについては触れません。

投稿日時 - 2010-06-07 13:01:21

ANo.2

System.Drawing.Imaging.ColorMatrixクラスを利用して半透明できます
詳しく下記のURLを参照してください。
http://yellow.ribbon.to/~tuotehhou/index.php?CSharp0002

投稿日時 - 2010-06-06 22:22:55

あなたにオススメの質問