トップ回答者
VB6.0でPictureBox 背景色透明にしたい

質問
-
回答
-
Option Explicit Private Sub Command1_Click() Picture1.AutoRedraw = False Picture1.BackColor = vbYellow Picture1.ScaleMode = vbPixels Set Picture1.Picture = Me.Icon Picture1.Print "漢字" Picture2.AutoRedraw = True Picture2.ScaleMode = vbPixels Picture2.BackColor = vbGreen Picture2.Refresh Picture2.PaintPicture _ Picture1.Image, 0, 0, 60, 60, 0, 0, 60, 60 End Sub
背景を透明化するのではなく、前景のみを描画されては如何でしょうか。
たとえば上記は、Picture1 への描画内容を Picture2 に転送するコードです。
上記をそのまま実行すると、Picture2(緑)の左上60ドット四方に
「黄色背景+アイコン」が描画されるようになっています。そして、先頭の「Picture1.AutoRedraw = False」を True に変更すると
「黄色背景+アイコン+漢字」が描画されます。いずれも「黄色背景」が描画されますが、それをを転送したくない場合には、
最後の行にある PaintPicture の際に、Picture1.Image ではなく
Picture1.Image を渡すようにします。そうすれば、「アイコン」のみ描画されます。 -
ライブラリはどういった関数を提供しているのでしょうか。
hDC プロパティを渡しているようなケースではかんたんな実現は難しいかと思われます。以下は hDC プロパティを渡している前提で書いていますので、インターフェースが違うのであれば、ひとまず気にしないでください。
これは BackColor で背景が描かれた上にカメラの画像を描いているので、外から手に入るのは BackColor つきしかないため、透過した画像を得ることはできません。(合成されてしまった絵からはどうしようもできません。理由は BackColor の色の部分が透過すべきなのか、カメラから来たその色なのか判断つかないためです)
方法として考えられるのは以下のものでしょうか。
- カメラからぜったこないような色を背景色に設定し、その色を透過色として扱って抜き取るやり方。
- hDC に PictureBox ではなく、API を使って DIB を割り当てた hDC を得るなど、Win32API をバリバリ使える人じゃないと厳しいやり方。
- 編集済み AzuleanMVP, Moderator 2014年4月16日 13:37
- 回答の候補に設定 星 睦美 2014年4月21日 7:08
- 回答としてマーク 星 睦美 2014年4月23日 4:32
すべての返信
-
Option Explicit Private Sub Command1_Click() Picture1.AutoRedraw = False Picture1.BackColor = vbYellow Picture1.ScaleMode = vbPixels Set Picture1.Picture = Me.Icon Picture1.Print "漢字" Picture2.AutoRedraw = True Picture2.ScaleMode = vbPixels Picture2.BackColor = vbGreen Picture2.Refresh Picture2.PaintPicture _ Picture1.Image, 0, 0, 60, 60, 0, 0, 60, 60 End Sub
背景を透明化するのではなく、前景のみを描画されては如何でしょうか。
たとえば上記は、Picture1 への描画内容を Picture2 に転送するコードです。
上記をそのまま実行すると、Picture2(緑)の左上60ドット四方に
「黄色背景+アイコン」が描画されるようになっています。そして、先頭の「Picture1.AutoRedraw = False」を True に変更すると
「黄色背景+アイコン+漢字」が描画されます。いずれも「黄色背景」が描画されますが、それをを転送したくない場合には、
最後の行にある PaintPicture の際に、Picture1.Image ではなく
Picture1.Image を渡すようにします。そうすれば、「アイコン」のみ描画されます。 -
ライブラリはどういった関数を提供しているのでしょうか。
hDC プロパティを渡しているようなケースではかんたんな実現は難しいかと思われます。以下は hDC プロパティを渡している前提で書いていますので、インターフェースが違うのであれば、ひとまず気にしないでください。
これは BackColor で背景が描かれた上にカメラの画像を描いているので、外から手に入るのは BackColor つきしかないため、透過した画像を得ることはできません。(合成されてしまった絵からはどうしようもできません。理由は BackColor の色の部分が透過すべきなのか、カメラから来たその色なのか判断つかないためです)
方法として考えられるのは以下のものでしょうか。
- カメラからぜったこないような色を背景色に設定し、その色を透過色として扱って抜き取るやり方。
- hDC に PictureBox ではなく、API を使って DIB を割り当てた hDC を得るなど、Win32API をバリバリ使える人じゃないと厳しいやり方。
- 編集済み AzuleanMVP, Moderator 2014年4月16日 13:37
- 回答の候補に設定 星 睦美 2014年4月21日 7:08
- 回答としてマーク 星 睦美 2014年4月23日 4:32