ページ 1 / 1
BMPファイル表示で透過色を
Posted: 2006年5月24日(水) 20:20
by yama
BMPファイル表示で透過色を使用できますか?
過去ログを参考にBMPを表示させるとき周囲の色を透過させるべく
コード: 全て選択
hResBmp=LoadImage(GetModuleHandle(0),"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_LOADTRANSPARENT)
などとしましたがBMPの左上端の色を指定して透過するという事がうまく行きません。
表示自体は成功しており LR_MONOCHROMEなどのパラメーターは
成功しているので入れ方はあっていると思うのですが・・
ちょっとプログラムをおしゃれにしようと文字をBMPで作成しましたが
デスクトップの画像のプロパティでデザインや配色を変更するとプログラム
ウインドウの色も替わってしまう事に気づきました。
そもそもXPなのにWINDOWSクラシック表示にしている自分に合わせて
作ってしまったためなのですが。
ちなみにWINDOWSクラシック表示に合わせて大きさを調整してしまうと
XP表示に下とき縦方向がつまってしまいますね。
Re: BMPファイル表示で透過色を
Posted: 2006年5月26日(金) 13:08
by ノッチ
>
コード: 全て選択
hResBmp=LoadImage(GetModuleHandle(0),"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_LOADTRANSPARENT)
>
> などとしましたがBMPの左上端の色を指定して透過するという事がうまく行きません。
たしかLR_LOADTRANSPARENTは256色までのビットマップでないと透過できなかった
記憶があります。
ビットマップを256色に変更すれば解決すると思います。
Re: BMPファイル表示で透過色を
Posted: 2006年5月26日(金) 16:58
by yama
メッセージ感謝です
> たしかLR_LOADTRANSPARENTは256色までのビットマップでないと透過できなかった
> 記憶があります。
> ビットマップを256色に変更すれば解決すると思います。
8ビット256色に変更してみましたが透過はできませんでした。
ファイルからの他リソースに読み込ませてみても同様でした。
前後に問題ありか?Paintイベント内に以下のコードをかきました。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]Dim hResBmp As DWord
Dim hOldBmp As DWord
Dim hBuf As DWord
Dim udtBitmap As BITMAP
hResBmp=LoadImage(GetModuleHandle(0),"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_LOADTRANSPARENT)
GetObject(hResBmp,Len(udtBitmap),udtBitmap)
hBuf=CreateCompatibleDC(hDC)
hOldBmp=SelectObject(hBuf,hResBmp)
BitBlt(hDC,0,0,udtBitmap.bmWidth,udtBitmap.bmHeight,hBuf,0,0,SRCCOPY) '←第2・第3引数は適宜変更
SelectObject(hBuf,hOldBmp)
DeleteObject(hResBmp)
半ばあきらめモードです
Re: BMPファイル表示で透過色を
Posted: 2006年5月26日(金) 17:59
by ノッチ
>
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]Dim hResBmp As DWord
> Dim hOldBmp As DWord
> Dim hBuf As DWord
> Dim udtBitmap As BITMAP
> hResBmp=LoadImage(GetModuleHandle(0),"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_LOADTRANSPARENT)
> GetObject(hResBmp,Len(udtBitmap),udtBitmap)
> hBuf=CreateCompatibleDC(hDC)
> hOldBmp=SelectObject(hBuf,hResBmp)
> BitBlt(hDC,0,0,udtBitmap.bmWidth,udtBitmap.bmHeight,hBuf,0,0,SRCCOPY) '←第2・第3引数は適宜変更
> SelectObject(hBuf,hOldBmp)
> DeleteObject(hResBmp)
>
LR_LOADTRANSPARENT を指定してLoadImageを呼び出すと
最初の1ピクセルと同じ色をCOLOR_WINDOWという色に変更します。
この色はABのウィンドウの背景色とは違う色なので透過ではなく見えます。
ウィンドウの背景色(COLOR_3DFACE)と同じ色にするには、
hResBmp=LoadImage(GetModuleHandle(0),"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_LOADTRANSPARENT or LR_LOADMAP3DCOLORS)
のようにするとできます。
Re: BMPファイル表示で透過色を
Posted: 2006年5月26日(金) 19:06
by yama
> LR_LOADTRANSPARENT を指定してLoadImageを呼び出すと
> 最初の1ピクセルと同じ色をCOLOR_WINDOWという色に変更します。
> この色はABのウィンドウの背景色とは違う色なので透過ではなく見えます。
> ウィンドウの背景色(COLOR_3DFACE)と同じ色にするには、
>
> [quote]hResBmp=LoadImage(GetModuleHandle(0),"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_LOADTRANSPARENT or LR_LOADMAP3DCOLORS)[/quote]
>
> のようにするとできます。
教えて頂いたようにすると透過OKとなりました。すばやいRESありがとうございます
ウィンドウの背景色(COLOR_3DFACE)はWINDOWSが管理している色のようで
デスクトップのデザインの変化に応じて透過?してくれました。当面の目標はクリア
できそうです。
ちなみにImegeBoxコントロールを使用したときも透過できるのでしょうか?