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
画像が透過しました。ありがとうございました。