Visual Basic 中学校 掲示板
投稿内容
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
>
投稿一覧
>
貼り付けをした時のBackColorについて
タグの編集...
投稿者
東
 (高校生)   投稿日時
2016/8/15 10:36:25
ピクチャーボックスを切り取りやコピーをしてその画像を張り付けるということをしているのですが、貼り付けには成功するのですが、貼り付けた時に画像のBackColorをTransparentにしているのですが、なぜか灰色になってしまいます。何か対処法などはないのでしょうか。
貼り付けをする時のコードです。
Private
Sub
貼り付けToolStripMenuItem_Click(sender
As
Object
, e
As
EventArgs)
Handles
貼り付けToolStripMenuItem.Click
Me
.gazou =
New
PictureBox
Me
.gazou.Name =
"gazou"
Me
.gazou.AutoSize =
False
Me
.gazou.Size = sentaku.Size
Me
.gazou.BackColor = Color.Transparent
Me
.gazou.SizeMode = PictureBoxSizeMode.StretchImage
Me
.gazou.Image =
New
Bitmap(Clipboard.GetImage)
gazou.ContextMenuStrip = ContextMenuStrip1
AddHandler
gazou.MouseDown,
AddressOf
gazou_MouseDown
AddHandler
gazou.MouseMove,
AddressOf
gazou_MouseMove
AddHandler
gazou.MouseUp,
AddressOf
gazou_MouseUp
AddHandler
gazou.Click,
AddressOf
gazou_Click
Panel1.Controls.Add(
Me
.gazou)
Me
.gazou.BringToFront()
End
Sub
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2016/8/15 11:58:44
> なぜか灰色になってしまいます。
Panel1.Controls.Add(Me.gazou)
としていますから、Panel の BackgroundImage や BackColor が透けて見えるはずです。
Panel の背景が灰色なのではありませんか?
投稿者
東
 (高校生)   投稿日時
2016/8/15 12:28:17
いえ、Panel1の色は灰色ではなく、ミントクリーム色です。
投稿者
(削除されました)
 ()   投稿日時
2016/8/15 13:04:58
(削除されました)
投稿者
(削除されました)
 ()   投稿日時
2016/8/15 14:12:16
(削除されました)
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2016/8/15 14:13:57
> Me.gazou.Size = sentaku.Size
> Me.gazou.SizeMode = PictureBoxSizeMode.StretchImage
この場合、画像周辺の余白が全く無い状態になりますので、
たとえ Transparent を指定しても、PictureBox の背景色は見えません。
> Me.gazou.Image = New Bitmap(Clipboard.GetImage)
ここで得られる画像は、不透明画像になります。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/0416af2a-a2f4-49b5-a085-f117f8576ddf/bmp?forum=vcgeneralja
ということで、今回の場合は 「背景部が灰色な不透明画像」を貼っていたため、
そもそも PictureBox の BackColor を指定しても意味が無い状態なのだと推察します。
一応、手元のソフト幾つかで試して見たところ、たとえば "Paint.NET" の場合、
画像の透過部分もクリップボードにコピーされるようで、VB.NET からは
それを "PNG" 系式として取り出すことができました。
Dim png As Bitmap
If Clipboard.ContainsData("PNG") Then
Using stm = DirectCast(Clipboard.GetData("PNG"), System.IO.Stream)
png = New Bitmap(stm)
End Using
ElseIf Clipboard.ContainsImage() Then
Using img As Image = Clipboard.GetImage()
png = New Bitmap(img)
End Using
End If
クリップボードにコピーされるデータ形式は、コピー元のアプリケーションによって
様々ですので、お使いのソフトが「透明度を保持したクリップボードデータ形式」を
サポートしているか、あらためて確認してみてください。
投稿者
東
 (高校生)   投稿日時
2016/8/19 11:29:40
画像が透過しました。ありがとうございました。