[英]Image to byte[], Convert and ConvertBack
我有一項將網站上存儲的圖像轉換為字節數組的服務
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("URLTOIMAGE");
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
Bitmap bmp = new Bitmap(myResponse.GetResponseStream());
myResponse.Close();
ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Bmp);
此代碼返回一個字節數組,該字節數組存儲在數據庫(SQL Azure)中。 在Windows Phone應用程序中,我嘗試轉換此字節數組以在頁面上顯示它。
public class BytesToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
BitmapImage empImage = new BitmapImage();
empImage.SetSource(new MemoryStream((Byte[])value));
return empImage;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
字節數組被應用程序很好地接收,但是當我嘗試執行SetSource時會引發異常。
empImage.SetSource(new MemoryStream((Byte[])value));
=> "Exception was unhandled", The request is not supported
你能幫助我嗎? 謝謝
此代碼有效:
public class BytesToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MemoryStream stream = new MemoryStream((Byte[])value);
WriteableBitmap bmp = new WriteableBitmap(173, 173);
bmp.LoadJpeg(stream);
return bmp;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
謝謝大家 :)
private ImageSource GetPhoto(byte[] bytearr)
{
if (bytearr != null)
{
BitmapImage image = new BitmapImage();
InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream();
ms.AsStreamForWrite().Write(bytearr, 0, bytearr.Length);
ms.Seek(0);
image.SetSource(ms);
ImageSource src = image;
return src;
}
else
return null;
}
對於我的UWP應用,我使用以下IValueConverter將字節數組轉換為<Image Source={Binding} />
的可綁定對象。
internal class ByteImageSourceConverter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
return null;
return ByteToImage((byte[])value);
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
static ImageSource ByteToImage(byte[] imageBytes)
{
BitmapImage image = new BitmapImage();
image.SetSource(imageBytes.ConvertToInMemoryRandomAcessStream());
ImageSource src = image;
return src;
}
}
internal static InMemoryRandomAccessStream ConvertToInMemoryRandomAcessStream(this byte[] arr)
{
var randomAccessStream = new InMemoryRandomAccessStream();
randomAccessStream.WriteAsync(arr.AsBuffer());
randomAccessStream.Seek(0);
return randomAccessStream;
}
對不起,我使用同步功能中的WriteAsync。 為了這篇文章的目的,我沒有時間解決這個問題,但是它是這樣工作的:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.