正如@Clemens說,我們應該能夠使用WriteableBitmap
。我們可以通過BitmapDecoder.PixelWidth
和BitmapDecoder.PixelHeight
屬性獲得寬度和高度。然後我們可以使用WriteableBitmap.PixelBuffer
將字節數組設置爲WriteableBitmap
。
PixelBuffer不能直接寫入,但是,您可以使用語言特定的技術訪問緩衝區並更改其內容。 要從C#或Microsoft Visual Basic中訪問像素內容,可以使用AsStream擴展方法以流的形式訪問基礎緩衝區。
欲瞭解更多信息,請參閱WriteableBitmap.PixelBuffer
的備註。
例如:
IRandomAccessStream random = await RandomAccessStreamReference.CreateFromUri(ImageWhite.UriSource).OpenReadAsync();
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(random);
PixelDataProvider pixelData = await decoder.GetPixelDataAsync();
var PixelArray = pixelData.DetachPixelData();
WriteableBitmap bitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
await bitmap.PixelBuffer.AsStream().WriteAsync(PixelArray, 0, PixelArray.Length);
MyImage.Source = bitmap;
更新:
轉換的WriteableBitmap
到BitmapImage
,我們應該能夠到流從WriteableBitmap
編碼。
例如:
InMemoryRandomAccessStream inMemoryRandomAccessStream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, inMemoryRandomAccessStream);
Stream pixelStream = bitmap.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96.0, 96.0, pixels);
await encoder.FlushAsync();
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(inMemoryRandomAccessStream);
MyImage.Source = bitmapImage;
'BitmapImage.SetSourceAsync'不接受原始像素緩衝器,但只有一個編碼的位圖的幀,例如一個PNG或JPEG。您可以改用WriteableBitmap。 – Clemens
如何獲取字節數組?如果你從中得到它,我們應該能夠通過你的方法得到它。 –
嗨Jayden顧,感謝您的評論。這是我如何得到我的數組: – moh67