WPF C#图像源
我对在WPF表单中显示图像非常陌生,在转换和分配GUI的图像源时遇到了麻烦WPF C#图像源,c#,wpf,image,C#,Wpf,Image,我对在WPF表单中显示图像非常陌生,在转换和分配GUI的图像源时遇到了麻烦 System.Drawing.Image testImg = ImageServer.DownloadCharacterImage(charID, ImageServer.ImageSize.Size128px); byte[] barr = imgToByteArray(testImg); CharImage.Source = ByteToImage(barr);
System.Drawing.Image testImg = ImageServer.DownloadCharacterImage(charID, ImageServer.ImageSize.Size128px);
byte[] barr = imgToByteArray(testImg);
CharImage.Source = ByteToImage(barr);
public byte[] imgToByteArray(System.Drawing.Image testImg)
{
using (MemoryStream ms = new MemoryStream())
{
testImg.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}
}
public System.Drawing.Image ByteToImage(byte[] barr)
{
MemoryStream ms = new MemoryStream(barr);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
return returnImage;
}
因此,我从EVE在线C#API库中获取一幅图像(JPEG),然后尝试将其转换为字节数组并返回到正确的图像。然而,我总是会遇到这样的错误:“无法将类型‘System.Drawing.Image’隐式转换为‘System.Windows.Media.ImageSource’”。对于如何解决这个问题,我完全目瞪口呆 一种可能的解决方案是将图像文件(例如,.
jpg
)保存为WPF嵌入式资源,然后使用以下代码段获取BitmapImage
:
清单1。从EmbeddedResource获取位图图像
相应地,将WPFImage
控件(例如,Image1
)的Source
属性设置为函数返回的BitmapImage
:
Image1.Source = GetEmbeddedBitmapImage(_strEmbeddedPath);
注意:您应参考以下内容:
using System.Windows.Media.Imaging;
using System.Reflection;
另一种可能的解决方案是使用Uri
对象从图像文件中获取BitmapImage
,如以下代码段(清单2)所示:
清单2。从文件获取位图图像(使用Uri)
希望这能有所帮助。
System.Drawing.Image
是WinForms,而不是WPF。您的ByteToImage方法应该返回BitmapSource
从字节数组创建BitmapSource
的最简单方法可能是BitmapFrame。创建:
public BitmapSource ByteArrayToImage(byte[] buffer)
{
using (var stream = new MemoryStream(buffer))
{
return BitmapFrame.Create(stream,
BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
您可以将上述方法的返回值指定给图像
控件的源
属性:
image.Source = ByteArrayToImage(barr);
那么我将把图像本身放在哪里呢?抱歉,对WPF来说太陌生了,所以我已经没有深度了。请不要忘记设置bi.CacheOption=BitmapCacheOption.OnLoad代码>,否则在需要显示图像时可能无法加载图像。您可能认为框架会知道如何执行此操作,但有几次我被它抓住了。您应该在XAML网格中放置一些图像控件,并命名为,例如,将BitmapImage应用于其属性Image1.Source。最好的方面是,比嵌入式资源更好的是普通资源。然后,您将从一个类似的新位图(新Uri(“pack://application:,,,/Images/Test.jpg”)代码>
public BitmapSource ByteArrayToImage(byte[] buffer)
{
using (var stream = new MemoryStream(buffer))
{
return BitmapFrame.Create(stream,
BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
image.Source = ByteArrayToImage(barr);