• 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API

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. 怎样获得该图形文件原来的文件名

在这里,恳请不愿意回答的朋友不要作一些似是而非的答案,不愿意回答就不要作答!以免愿意回答的其他朋友出于避免抢题而回避了,谢谢各位!
...全文
100 点赞 收藏 1
写回复
1 条回复
望諸公 04月10日
问题已经解决。
原来,在截图后,直接往RichTextBox粘贴,才判断为图片;
而如果,将截图放在QQ或微信的输入框,则已经成为文件,然后复制,再往RichTextBox粘贴,此时,DataObject1.ContainsImage 和 DataObject1.ContainsFileDropList 均判断为True,使用 DataObject1.GetImage()来操作,就是上述问题出处。

先判断剪切板的文件,再判断图片,避免重复处理同一个内容。
回复 点赞
发动态
发帖子
VB
创建于2007-09-28

1.1w+

社区成员

11.0w+

社区内容

VB技术相关讨论,主要为经典vb,即VB6.0
社区公告
暂无公告