![](/img/trans.png)
[英]WPF/WinForms/GDI interop: converting a WriteableBitmap to a System.Drawing.Image?
[英]Converting a WriteableBitmap image ToArray in UWP
我正在訪問我的 azure 服務上的 blob 存儲中的圖像。 我正在返回圖像的uri
,然后使用 HttpClient 嘗試下載它。 uri
被驗證是正確的。
using (HttpClient client = new HttpClient())
{
try
{
HttpResponseMessage response = await client.GetAsync(new Uri(((App)Application.Current).results.statsInformation.ImageBlob.ImageUri, UriKind.RelativeOrAbsolute));
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
using (var stream = await response.Content.ReadAsStreamAsync())
{
using (var memStream = new MemoryStream())
{
await stream.CopyToAsync(memStream);
memStream.Position = 0;
memStream.Seek(0, SeekOrigin.Begin);
myOnlineImage.SetSource(memStream.AsRandomAccessStream());
}
}
}
}
catch (Exception)
{
throw;
}
}
來自服務器的圖像存儲在變量myOnlineImage
。 然后我想使用myOnlineImage.PixelBuffer.ToArray();
提取像素信息myOnlineImage.PixelBuffer.ToArray();
. 這是因為圖像沒有正確下載嗎? 任何人都可以幫助我解決這個問題嗎?
我收到的例外是:
例外
消息“值不能為空。\\r\\n參數名稱:源”
StackTrace " at System.Runtime.InteropServices.Marshal.CopyToManaged(IntPtr source, Object destination, Int32 startIndex, Int32 length)\\r\\n at System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.CopyTo(IBuffer source, UInt32 sourceIndex, Byte[ ] 目標、Int32 目標索引、Int32 計數)\\r\\n 在 System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions.ToArray(IBuffer source, UInt32 sourceIndex, Int32 count)\\r\\n 在 System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions。 ToArray(IBuffer 源)\\r\\n 在 Stonegaard_endless_runner.MainPage.d__7.MoveNext()"
額外的
我已經檢查過我可以線程訪問圖像。
在某些情況下,您不能使用System.Runtime.InteropServices
。 指針myOnlineImage.PixelBuffer
為空。 您可以使用BitmapImage
但不能使用WriteableBitmap
並使用BitmapDecoder
、 BitmapFrame
、 PixelDataProvider
轉換為byte[]
,就像 msdn 的示例一樣:
byte[] image_array = null;
int image_array_width = 0;
int image_array_height = 0;
using (HttpClient client = new HttpClient())
{
try
{
HttpResponseMessage response = await client.GetAsync(new Uri("http://www.example.com/logo.png", UriKind.RelativeOrAbsolute));
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
using (Stream stream = await (response.Content.ReadAsStreamAsync()))
{
using (IRandomAccessStream strm = stream.AsRandomAccessStream())
{
strm.Seek(0);
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(strm);
BitmapFrame bitmapFrame = await decoder.GetFrameAsync(0);
// Get the pixels
var transform = new BitmapTransform { ScaledWidth = decoder.PixelWidth, ScaledHeight = decoder.PixelHeight };
PixelDataProvider dataProvider =
await bitmapFrame.GetPixelDataAsync(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.RespectExifOrientation,
ColorManagementMode.ColorManageToSRgb);
await strm.FlushAsync();
image_array = dataProvider.DetachPixelData();
image_array_width = (int)decoder.PixelWidth;
image_array_height = (int)decoder.PixelHeight;
}
}
}
}
catch (Exception)
{
throw;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.