SoftwareBitmap
是 UWP 中的新增功能。我从这个开始:
var softwareBitmap = EXTERNALVALUE;
// do I even need a writeable bitmap?
var writeableBitmap = new WriteableBitmap(softwareBitmap.PixelWidth, softwareBitmap.PixelHeight);
softwareBitmap.CopyToBuffer(writeableBitmap.PixelBuffer);
// maybe use BitmapDecoder?
我很茫然。谢谢你。
请注意,我不是指
BitmapImage
;我的意思是 SoftwareBitmap
。 最佳答案
在这里,我获取一个图像文件并将其缩小为 100x100 SoftwareBitmap
并将其作为 ImageSource
返回。
既然你已经有了 SoftwareBitmap
,我认为你的任务会更容易。但希望这能给你一个想法。
在初始化我们新缩放的 WritableBitmap
实例时,我们只需要 PixelBuffer
作为 SoftwareBitmap
。如果您可以直接从我们拥有的 byte[] 像素数据( 像素 局部变量)创建一个 IBuffer,您可以直接将其提供给 SoftwareBitmap.CreateCopyFromBuffer()
方法。在这种情况下不需要 WritableBitmap
。
这是代码:
private async Task<ImageSource> ProcessImageAsync(StorageFile ImageFile)
{
if (ImageFile == null)
throw new ArgumentNullException("ImageFile cannot be null.");
//The new size of processed image.
const int side = 100;
//Initialize bitmap transformations to be applied to the image.
var transform = new BitmapTransform() { ScaledWidth = side, ScaledHeight = side, InterpolationMode = BitmapInterpolationMode.Cubic };
//Get image pixels.
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();
//Initialize writable bitmap.
var wBitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
await wBitmap.SetSourceAsync(stream.AsRandomAccessStream());
//Create a software bitmap from the writable bitmap's pixel buffer.
var sBitmap = SoftwareBitmap.CreateCopyFromBuffer(wBitmap.PixelBuffer, BitmapPixelFormat.Bgra8, side, side, BitmapAlphaMode.Premultiplied);
//Create software bitmap source.
var sBitmapSource = new SoftwareBitmapSource();
await sBitmapSource.SetBitmapAsync(sBitmap);
return sBitmapSource;
}
附注。我知道这句话不应该是答案的一部分,但我必须说,我从您的 MVA 和 Channel9 视频中学到了很多关于 XAML/C# 和开发 Windows 应用商店应用的知识! :)
关于c# - 如何调整 SoftwareBitmap 的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41251716/