DOBON.NET DOBON.NETプログラミング掲示板過去ログ

指定した色を透明色として画像を表示する

環境/言語:[言語:VB2005 OS:xpsp2 ]
分類:[その他]

指定した色を透明色として画像を表示したいのですがうまくいきません。どこが悪いか教えていただきませんか?



'画像の読み込み
Dim bmp As Bitmap = New Bitmap("image\tesuto.bmp")
'白を透明色とする
bmp.MakeTransparent(Color.White)
'PictureBox1のGraphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'表示する
g.DrawImage(bmp, 0, 0)
'Graphicsオブジェクトを破棄
g.Dispose()
bmp.Dispose()



上のままだと指定した色を透明色にするどころか画像自体表示されません。どうすればよいのでしょうか?
> 'PictureBox1のGraphicsオブジェクトの作成
> Dim g As Graphics = PictureBox1.CreateGraphics()
> '表示する
> g.DrawImage(bmp, 0, 0)
これですと再描画されませんので、Load時にこの処理を行っていると
再描画されずになにも表示されません。
再描画されるようにするには、
PictureBox1.Image = bmp
としてやるといいです。

また、
> bmp.Dispose()
PictureBoxに使用しているBitmapを閉じてしまうと表示できないので、
Disposeはまずいです。Disposeしたい場合は、bmpをモジュールレベルで宣言し、
PictureBoxに表示しなくなった時点でDisposeするといいです。

という訳で、
-----------------------------------------------------------
'画像の読み込み
Dim bmp As Bitmap = New Bitmap("image\tesuto.bmp")
'白を透明色とする
bmp.MakeTransparent(Color.White)
'表示する
PictureBox1.Image = bmp
-----------------------------------------------------------
で、表示されます。
(老婆心ながら・・)順を追って理解して行ったほうが、いいですヨ
こちらの、「指定した色を透明色として画像を表示する」のコードを丸写し
されていますが、その前に「画像、印刷編メニュー」の初めから(良く読んで)
トライするほうが断片的な解決より身に付きますよ
>>おみさん
分かりやすい解説までつけてくれてありがとうございます。
無事表示させることができました。感謝。


>>y4yamaさん
順を追って理解したほうがいいとは自分でも思うのですが、
勉強だけだとどうしてもモチベーションの維持が難しい為、やりたい事をやりながら必要な知識を身に着けていく方向へどうしてもいってしまいます・・・
アドバイスありがとうございます。
2007/09/12(Wed) 20:59:30 編集(投稿者)

追加の質問なのですが、背景画像をPictureBox1に表示していて、
その上からPictureBox2で人物画像を表示しているのですが、
人物画像の背景色は教えてもらった通りにやったら透明色にできたのですが、
PictureBox2のデフォのカラーが表示されていて結局透明色の意味がありません・・・。
PictureBox2のデフォのカラーを透明色にはできないのでしょうか?

一応分かりやすいように画像を用意したのでよろしければ見てください。
http://dobon.net/cgi-bin/up/files/031.zip
PictureBox2を使わずにバックグランドイメージとイメージを使ってたら自己解決しました。正しい使い方なのかは分かりませんが・・・
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板