Windows Phone 8.0 Blob to Image
本文关键字:to Image Blob Phone Windows | 更新日期: 2023-09-27 18:08:28
我有一个连接到DB的Web服务,我需要通过Web服务从BD中取出一个类型BLOB,然后创建一个图像。web服务从blob发送一个字节数组,我尝试了一个转换器绑定到XML中的图像(像我发现的一些建议),像这样
using (Stream ms = new MemoryStream(fileBytes, 0, fileBytes.Length))
{
ms.Write(fileBytes, 0, fileBytes.Length);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bitmapImage = new BitmapImage();
////////////////Exception here
bitmapImage.SetSource(ms);
return bitmapImage;
}
但然后我得到这个错误(异常从HRESULT: 0x88982F50
)。然后我发现,也许可能是字节数组的格式的问题,那可能是在base64
所以我已经改变了web服务,现在它给我一个64-Base字符串,然后更改为字节数组,但仍然有相同的错误。
我找到了这篇文章,但仍然没有运气。然后我找到了很多解决方案,比如InMemoryRandomAccessStream
或Image.FromStream
,但这些解决方案都适用于WP 8.1
我还用了:
image.SaveJpeg(stream, image.PixelWidth, image.PixelHeight, 0, 90);
///////AND////////
image = PictureDecoder.DecodeJpeg(ms);
但仍然没有运气
我确定我遗漏了一些东西,因为每个解决方案都指出了这些解决方案,但我真的不明白。
我使用以下函数完成了这一点(将数据库中的二进制对象加载到图像中):
public static BitmapImage LoadImage(byte[] imageData)
{
if (imageData == null || imageData.Length == 0) return null;
var image = new BitmapImage();
using (var mem = new MemoryStream(imageData))
{
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = mem;
image.EndInit();
}
image.Freeze();
return image;
}
可以看到,该函数接受一个byte[]
数组作为参数。我从数据库中得到这个数组,像这样:
using (var reader = dataLayer.ExecuteReader(sqlString))
{
if (reader.Read())
{
if (reader["ImageData"] != null && reader["ImageData"] != DBNull.Value)
{
imageBytes = (byte[])reader["ImageData"];
}
}
}
,其中ImageData
是来自数据库的列名。然后调用LoadImage()
函数,并将imageBytes
作为参数传入。
我终于得到它,这是一个错误与DB实际上。我正在获取字节数组的列上的数据已损坏或有另一个我不理解的用途,所以我与DB管理员联系,他帮助我解决了这个问题,所以现在我有了正确的数据。第一个代码确实有效。感谢大家的帮助