画像の一部分を半透明化するには?


ミキ  2005-04-28 00:23:40  No: 14508  IP: [192.*.*.*]

フォームに画像を貼り付けています.その画像の一部分,例えばマウスカーソルの周辺だけを半透明化したいと思っています.

フォームのプロパティのAlphaBlendValueを設定すると,全体が半透明化されてしまいます.

どのようにすれば良いか,どなたかご教授お願いします.

編集    削除
メラトニン  2005-04-28 07:39:58  No: 14509  IP: [192.*.*.*]

"不定形なフォーム(Windows2000専用)" 
http://forum.nifty.com/fdelphi/samples/01218.html
が正にそれです。
透明度の情報を持った32bit Bitmapがそのまま反映されます。
ちょっと難しいかもしれませんががんばってください。

PS.
googleでUpdateLayeredWindowで検索かけたら引っかかりました。
私はこれを実現するのにとても苦労したんですけど…

編集    削除
通りすがり  2005-04-29 00:33:04  No: 14510  IP: [192.*.*.*]

32bit Bitmapって、どうやれば作成できますか?

編集    削除
河内のおっさん  2005-04-29 01:03:17  No: 14511  IP: [192.*.*.*]

http://forum.nifty.com/fdelphi/samples/01218.html
のソース見たら
Surface.PixelFormat:=pf32bit;
って書いてあるやんけ!

編集    削除
通りすがり  2005-04-29 01:23:48  No: 14512  IP: [192.*.*.*]

sample.bmp の作成についてですけど・・・

編集    削除
メラトニン  2005-04-29 04:02:59  No: 14513  IP: [192.*.*.*]

>通りすがり 2005/04/28(木) 15:33:04
>32bit Bitmapって、どうやれば作成できますか?
TBitmapのPixelFormatをpf32bitにすればOKです。
16bit BitmapはR,G,B
32bit BitmapはR,G,B,Alphaの配列でデータが格納されるだけです。
ScanLineでBitmapデータにアクセスしてください。
ただ、Alpha値に伴いRGBを変更させなくてはならないのはリンクの通りです。
詳しく知りたければ中村氏著の「Delphi Fraphic Secrets」をお読みください。

編集    削除
メラトニン  2005-04-29 04:05:31  No: 14514  IP: [192.*.*.*]

補足ですが、上の本では32bit Bitmapについて余り詳しく述べられてはいませんがBitmapについて理解できれば16bitも32bitも大して変わりないことは理解できると思います。

編集    削除
りおりお  2005-04-29 04:20:18  No: 14515  IP: [192.*.*.*]

> Bitmapについて理解できれば16bitも32bitも大して変わりないことは理解できると思います。

16bit はちょっと特殊ですけどね。一番自然なのは pf24bit だと思いますけど。

編集    削除
メラトニン  2005-04-29 06:25:38  No: 14516  IP: [192.*.*.*]

ハゥ! 24bitでした。
>「Delphi Fraphic Secrets」
「Delphi Graphic Secrets」です、
がんばれ俺!

編集    削除
kkk  2005-04-29 09:12:24  No: 14517  IP: [192.*.*.*]

32bit Bitmapには2種類あります。
①WindowsXPで利用されている R,G,B,Alphaをそれぞれ1バイト使用したもの
  アルファチャンネルを利用して透明度を指定する。
②16bit-Bitmapと同じ様にビットフィールド形式のもの
  16bit-Bitmapでも通常の5-5-5以外に5-6-5等のフォーマットがあります。
  32bit-Bitmapの場合は10-10-10等のフォーマットがあります。
  これらのビットフィールド定義はBITMAPINFOHEADERの直後にあります。
  この場合ヘッダ内のbiCompressionがBI_BITFIELDSとなっています。

上の例で使用されている32bit-Bitmapは①のアルファチャンネル方式のものです。

通りすがりさんの
>32bit Bitmapって、どうやれば作成できますか?
はDelphiで 32bit-Bitmapを作成する方法ではなくて、32bit-Bitmap(アルファチャンネル付)を作成するグラフィックツールを教えて欲しいということなのでしょうか?

編集    削除
通りすがり  2005-05-05 18:04:03  No: 14518  IP: [192.*.*.*]

ちょっと遅くなりましたが、kkkさん、その通りです。
Windowsに付いているペイントでは作成できませんよね・・・

編集    削除
kkk  2005-05-05 23:28:55  No: 14519  IP: [192.*.*.*]

アルファチャンネル付32bit-Bitmapを出力できるソフトは割りと少ないですね。
WindowsXPのアイコンが作成できるツールは当然対応しているみたいですがサイズの大きいものは無理みたいですね。
一応Hyper-Paintでは32bit-bmpで出力できるみたいですが。
http://con-kiriman.web.infoseek.co.jp/c4/download.htm

編集    削除