有幾個示例可以執行此操作,但它們適用於Windows Phone 8.0或8.1 Silverlight。在Windows Phone 8.1運行時將BitmapImage轉換爲byte []數組運行時
但是,如何爲Windows Phone 8.1 Runtime做到這一點?
有幾個示例可以執行此操作,但它們適用於Windows Phone 8.0或8.1 Silverlight。在Windows Phone 8.1運行時將BitmapImage轉換爲byte []數組運行時
但是,如何爲Windows Phone 8.1 Runtime做到這一點?
試過嗎?
private byte[] ConvertToBytes(BitmapImage bitmapImage)
{
byte[] data = null;
using (MemoryStream stream = new MemoryStream())
{
WriteableBitmap wBitmap = new WriteableBitmap(bitmapImage);
wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100);
stream.Seek(0, SeekOrigin.Begin);
data = stream.GetBuffer();
}
return data;
}
您無法從Windows.UI.Xaml.Media.Imaging中提取像素。 BitmapImage。
最一般的解決方案是使用WriteableBitmap而不是BitmapImage。這些類都是BitmapSources,幾乎可以互換使用。該WriteableBitmap通過其PixelBuffer屬性提供它的像素數據:
byte[] pixelArray = myWriteableBitmap.PixelBuffer.ToArray(); // convert to Array
Stream pixelStream = wb.PixelBuffer.AsStream(); // convert to stream
否則,你將需要獲得來自任何地方的BitmapImage的距離得到了他們的像素。根據BitmapImage如何初始化,您可能能夠從其屬性中找到它的原點。 WinRT Xaml Toolkit有一個extension method FromBitmapImage來根據它的UriSource從BitmapImage創建一個WriteableBitmap。
醜陋的選擇是將BitmapImage渲染成圖像,根據圖像創建RenderTargetBitmap,然後使用RenderTargetBitmap獲取像素。 CopyPixelsAsync()
這是我如何得到並顯示圖像:StorageFile storageFile = args.Files [0]; var stream = await storageFile.OpenAsync(FileAccessMode.Read); var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); await bitmapImage.SetSourceAsync(stream); var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream); – Bayern
我在不同的地方看過幾次相同的代碼片段,並想知道像素流是否需要處理? – thumbmunkeys
There http://stackoverflow.com/questions/4732807/conversion-of-bitmapimage-to-byte-array是一些考慮它。 – marcinax
@marcinax你看過標題嗎?或者我發佈了什麼?我知道有100個樣本和問題可以做到這一點...你發佈的鏈接是Windows Phone「」「7」「」!!!! – Bayern
因此,另一個鏈接給你:http://stackoverflow.com/questions/12963508/bitmapimage-to-byte-windows-8-metro-winrt。這是WinRT的。使用搜索。 – marcinax