【问题标题】:How do I convert a System.Drawing.Image to a WPF Image如何将 System.Drawing.Image 转换为 WPF 图像
【发布时间】:2021-09-07 19:17:18
【问题描述】:
Dim classSymbol As Byte() = ConvertBase64ToByteArray(CheckSheetDetailObj.ClassSymbol)
Dim myimage As System.Drawing.Image
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream(classSymbol)
myimage = System.Drawing.Image.FromStream(ms)

我需要将myimage 类型为System.Drawing.Image 转换为System.Windows.Control.Image

【问题讨论】:

  • This question 应该提供从Bitmap 对象创建ImageSource 所需的所有信息,您可以从中创建Image
  • 当您实际需要 BitmapSource 时,为什么需要生成 System.Drawing.Image?直接这样做。请注意,System.Drawing.Image 是图形对象,而不是作为 WPF 图像控件的控件。您不能将前者转换为后者。只需分配 Source 属性。
  • 你能详细说明一下@Jimi
  • 我已经把它转换成位图了

标签: vb.net


【解决方案1】:

如果您想从编码为 Base64 的字节数组创建图形对象,然后将生成的位图分配给 WPF 图像控件,您只需要一个 MemoryStream。
您根本不需要添加对System.Drawing 的引用。

在任何情况下,您都不会图形对象转换为控件,而是将图形对象分配给可以呈现位图图形内容的控件。

您可以生成一个新的BitmapImage,将其BitmapImage.StreamSource 设置为MemoryStream 对象并将BitmapImage 分配给图像控件的Source 属性:

SomeImage.Source = BitmapImageFromBase64([Some Base64 string])

' [...]

Private Function BitmapImageFromBase64(base64 As String) As BitmapImage
    Dim bitmap = New BitmapImage()
    bitmap.BeginInit()
    bitmap.CacheOption = BitmapCacheOption.OnLoad
    bitmap.StreamSource = New MemoryStream(Convert.FromBase64String(base64))
    bitmap.EndInit()
    Return bitmap
End Function

如果您没有现有的图像控件,您可以即时创建一个,然后将其添加到容器中。
例如,一个 WrapPanel:

Dim newImage As New Image With {
    .Source = BitmapImageFromBase64([Some Base64 string]),
    .Width = 100,
    .Height = 100,
    .Margin = New Thickness(5, 5, 0, 0)
}
' Of course use the reference of an existing WrapPanel
wrapPanel.Children.Add(newImage)

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2011-10-25
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多