VB.Net中,将剪切板上的图片粘贴到RichTextBox,当GetImage无效时,怎样将剪切板上未知格式的图像(或位图等等)转换为Bmp格式

望諸公 2021-04-10 03:17:30
Dim ImageFormat1 As System.Drawing.Imaging.ImageFormat = Nothing
Dim DataObject1 As DataObject = Clipboard.GetDataObject()

'判断可以转换的格式,Bitmap总是可以通过
If DataObject1.GetDataPresent(DataFormats.Bitmap) = True Then
ImageFormat1 = System.Drawing.Imaging.ImageFormat.Bmp
ElseIf DataObject1.GetDataPresent(DataFormats.Tiff) = True Then
ImageFormat1 = System.Drawing.Imaging.ImageFormat.Tiff
ElseIf DataObject1.GetDataPresent(DataFormats.EnhancedMetafile) = True Then
ImageFormat1 = System.Drawing.Imaging.ImageFormat.Emf
ElseIf DataObject1.GetDataPresent(DataFormats.MetafilePict) = True Then
ImageFormat1 = System.Drawing.Imaging.ImageFormat.Wmf
ElseIf DataObject1.GetDataPresent(DataFormats.Dib) = True Then
ImageFormat1 = System.Drawing.Imaging.ImageFormat.MemoryBmp
Else
ImageFormat1 = System.Drawing.Imaging.ImageFormat.Jpeg
End If

Dim ImageName As String
Dim Image1 As Image = DataObject1.GetImage() '剪切后直接粘贴,则可行

'但例如,从QQ复制的图片,是Png格式的文件,但不在DataObject1.ContainsFileDropList,而上述GetImage方法也无法获得
If Image1 Is Nothing Then

Dim J As Integer, MemoryStream1 As System.IO.MemoryStream = Nothing
Dim STR1() As String = DataObject1.GetFormats()
For J = 0 To STR1.Count - 1 Step 1
MemoryStream1 = DataObject1.GetData(STR1(J), True)
If MemoryStream1 IsNot Nothing Then Exit For
Next J

Image1 = Image.FromStream(MemoryStream1, True, True) '出错,参数无效,应该是MemoryStream1问题
ImageName = "" '怎样获得该图形文件原来的文件名
Else
ImageName = "D:\Image1.bmp"
End If

Image1.Save(ImageName, ImageFormat1)

剪切板上有多种格式内容: 多个文件、多个截图、多行文本,请教以下问题:
1. 怎样将剪切板上未知格式的图形文件,转换为Bmp格式
2. 怎样获得该图形文件原来的文件名

在这里,恳请不愿意回答的朋友不要作一些似是而非的答案,不愿意回答就不要作答!以免愿意回答的其他朋友出于避免抢题而回避了,谢谢各位!
...全文
342 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
望諸公 2021-04-10
  • 打赏
  • 举报
回复
问题已经解决。
原来,在截图后,直接往RichTextBox粘贴,才判断为图片;
而如果,将截图放在QQ或微信的输入框,则已经成为文件,然后复制,再往RichTextBox粘贴,此时,DataObject1.ContainsImage 和 DataObject1.ContainsFileDropList 均判断为True,使用 DataObject1.GetImage()来操作,就是上述问题出处。

先判断剪切板的文件,再判断图片,避免重复处理同一个内容。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧