Using pngImage As Image = Image.FromFile(pngFilePath) Using bmp As New Bitmap(pngImage.Width, pngImage.Height) Using g As Graphics = Graphics.FromImage(bmp) g.Clear(Color.White) g.DrawImage(pngImage, 0, 0, pngImage.Width, pngImage.Height) End Using bmp.Save(OutputFile, ImageFormat.Png) End Using End Using
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim c = Clipboard.GetDataObject() Dim img As Image = Nothing If c.GetDataPresent("PNG", False) Then Dim o = TryCast(c.GetData("PNG"), System.IO.MemoryStream) If o IsNot Nothing Then img = Image.FromStream(o) End If ElseIf c.GetDataPresent(GetType(Image)) Then img = DirectCast(c.GetData(GetType(Image)), Image) End If PictureBox1.Image = img End Sub
それはさておき、相手が Firefox や Internet Explorer ならば Dim s = Clipboard.GetFileDropList() If s.Count > 0 Then PictureBox1.LoadAsync(s(0)) Return End If で行けるんじゃないですかね?
試しに FireFox を再インストールして確認してみたところ、 Internet Explorer および Firefox の場合は、 下記の 14 種類の形式がクリップボードに含まれていました。
> それはさておき、相手が Firefox や Internet Explorer ならば > Dim s = Clipboard.GetFileDropList() > If s.Count > 0 Then > PictureBox1.LoadAsync(s(0)) > Return > End If > で行けるんじゃないですかね?
本当ですね。普通に表示出来ました。 ただFireFoxはいけましたが、CromeやEdgeも対象としたいので、先にご教示頂きました Dim c = Clipboard.GetDataObject() Dim img As Image = Nothing If c.GetDataPresent("PNG", False) Then Dim o = TryCast(c.GetData("PNG"), System.IO.MemoryStream) If o IsNot Nothing Then img = Image.FromStream(o) End If ElseIf c.GetDataPresent(GetType(Image)) Then img = DirectCast(c.GetData(GetType(Image)), Image) End If PictureBox1.Image = img との合わせ技で解決出来そうです。 長い間悩んでおりました。どうも有り難うございました。