gpt4 book ai didi

c# - 在 Windows Phone 8.1 中从字节数组(数据库)加载、显示、转换图像

转载 作者:太空狗 更新时间:2023-10-29 20:16:48 25 4
gpt4 key购买 nike

完整的问题是如何在 Windows Phone 8.1 中显示从数据库加载的图像。图像数据作为字节数组加载(选中 - 加载正常)。

通过指定 urisource 显示图像效果很好。

Image img = new Image();
img.Source = new BitmapImage() {UriSource = new Uri("http://www.example.com/1.jpg") };
rootgrid.Children.Add(img);

但是当(图像的)字节数组转换为 BitmapImage 时,什么也没有显示。到目前为止我发现的唯一无异常示例是:

public BitmapImage ConvertToBitmapImage(byte[] image)
{
InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
var bitmapImage = new BitmapImage();
var memoryStream = new MemoryStream(image);
memoryStream.CopyToAsync(ras.AsStreamForWrite());
bitmapImage.SetSourceAsync(ras);
return bitmapImage;
}

Image img = new Image();
img.Source = ConvertToBitmapImage(picturebytearray);
rootgrid.Children.Add(img);

但是此时没有显示图片。

Microsoft 的文档仅包含从流中加载图像的示例,流是通过从内部存储打开文件获得的。但我需要加载保存在 sqlite 数据库中的图像。图片数据为jpeg格式。

编辑:工作代码基于 freshbm解决方案:

public async Task<BitmapImage> ConvertToBitmapImage(byte[] image)
{
BitmapImage bitmapimage = null;
using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
{
using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
{
writer.WriteBytes((byte[])image);
await writer.StoreAsync();
}
bitmapimage = new BitmapImage();
bitmapimage.SetSource(ms);
}
return bitmapimage;
}

然后在构造函数中你可以使用:

img.Source = ConvertToBitmapImage(imagebytearray).Result;

否则

img.Source = await ConvertToBitmapImage(imagebytearray);

最佳答案

您可以尝试像这样将 byte[] 转换为 BitmapImage:

using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
{
using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
{
writer.WriteBytes((byte[])fileBytes);
writer.StoreAsync().GetResults();
}
var image = new BitmapImage();
image.SetSource(ms);
}

找到它: http://www.codeproject.com/Tips/804423/Conversion-between-File-Byte-Stream-BitmapImage-an

我正在使用它从 sqlite 数据库中读取 byte[] 并将其绑定(bind)到页面上的图像。

对于您的代码,请尝试为异步函数添加 await:

public async Task<BitmapImage> ConvertToBitmapImage(byte[] image)
{
InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
var bitmapImage = new BitmapImage();
var memoryStream = new MemoryStream(image);
await memoryStream.CopyToAsync(ras.AsStreamForWrite());
await bitmapImage.SetSourceAsync(ras);
return bitmapImage;
}

Image img = new Image();
img.Source = await ConvertToBitmapImage(picturebytearray);
rootgrid.Children.Add(img);

我不擅长异步编程,但我认为这行得通。

关于c# - 在 Windows Phone 8.1 中从字节数组(数据库)加载、显示、转换图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27436237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com