这里我将一个图像文件缩小为100x100的SoftwareBitmap
,并将其作为ImageSource
返回。
既然你已经拥有了一个SoftwareBitmap
,我认为你的任务会更容易。但希望这能给你一些想法。
我们只需要WritableBitmap
的PixelBuffer
来初始化我们新缩放的SoftwareBitmap
实例。如果你可以直接从我们拥有的字节数组像素数据(本地变量pixels)创建一个IBuffer,则可以直接将其提供给SoftwareBitmap.CreateCopyFromBuffer()
方法。在那种情况下,就不需要WritableBitmap
了。
以下是代码:
private async Task<ImageSource> ProcessImageAsync(StorageFile ImageFile)
;
var stream = await ImageFile.OpenStreamForReadAsync();
var decoder = await BitmapDecoder.CreateAsync(stream.AsRandomAccessStream());
var pixelData = await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, transform, ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb);
var pixels = pixelData.DetachPixelData();
var wBitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
await wBitmap.SetSourceAsync(stream.AsRandomAccessStream());
var sBitmap = SoftwareBitmap.CreateCopyFromBuffer(wBitmap.PixelBuffer, BitmapPixelFormat.Bgra8, side, side, BitmapAlphaMode.Premultiplied);
var sBitmapSource = new SoftwareBitmapSource();
await sBitmapSource.SetBitmapAsync(sBitmap);
return sBitmapSource;
}
我知道这句话不应该成为答案的一部分,但我必须说,我从你的MVA和Channel9视频中学到了很多关于XAML/C#和开发Windows Store应用程序的知识! :)
BitmapImage
,而是SoftwareBitmap
。 - Jerry Nixon