从剪贴板图像保持图像透明度
本文关键字:图像 透明度 剪贴板 | 更新日期: 2023-09-27 18:12:29
我正在粘贴剪贴板上的图片(PNG透明):
Dim oDataObj As IDataObject = System.Windows.Forms.Clipboard.GetDataObject()
Dim oImgObj As Image = oDataObj.GetData(DataFormats.Bitmap, True)
oImgObj.Save(temp_local, System.Drawing.Imaging.ImageFormat.Png)
或c#中的
IDataObject oDataObj = System.Windows.Forms.Clipboard.GetDataObject();
Image oImgObj = oDataObj.GetData(DataFormats.Bitmap, true);
oImgObj.Save(temp_local, System.Drawing.Imaging.ImageFormat.Png);
问题是图像的透明度正在丧失。
是否有办法保持图像的透明度?
位图对象不能保持透明度,这就是为什么你会失去透明度
不幸的是,剪贴板就是这样工作的,它在没有透明度的情况下复制
我从这里找到了一个绝妙的解决方案。我已经将代码转换为VB。NET足以满足我的问题。下面的代码可以做到这一点:
Private Function GetImageFromClipboard() As Image
If Clipboard.GetDataObject() Is Nothing Then
Return Nothing
End If
If Clipboard.GetDataObject().GetDataPresent(DataFormats.Dib) Then
Dim dib = DirectCast(Clipboard.GetData(DataFormats.Dib), System.IO.MemoryStream).ToArray()
Dim width = BitConverter.ToInt32(dib, 4)
Dim height = BitConverter.ToInt32(dib, 8)
Dim bpp = BitConverter.ToInt16(dib, 14)
If bpp = 32 Then
Dim gch = GCHandle.Alloc(dib, GCHandleType.Pinned)
Dim bmp As Bitmap = Nothing
Try
Dim ptr = New IntPtr(CLng(gch.AddrOfPinnedObject()) + 40)
bmp = New Bitmap(width, height, width * 4, System.Drawing.Imaging.PixelFormat.Format32bppArgb, ptr)
Return New Bitmap(bmp)
Finally
gch.Free()
If bmp IsNot Nothing Then
bmp.Dispose()
End If
End Try
End If
End If
Return If(Clipboard.ContainsImage(), Clipboard.GetImage(), Nothing)
End Function