我正在开发 Windows 8 应用程序。我想将调整大小的图像作为字节。所以我的方法将获得 StorageFile、高度和宽度,它会返回我byte[]
或调整大小的图像。我到目前为止所尝试的内容如下。我的努力使我返回 byte[],所有值都为 0。
PS:我不想创建新的调整大小的 StorageFile 也不想仅将 WritableBitmapEx 用于一种方法。
private async Task<byte[]> ResizeImage(StorageFile BigFile, uint finalHeight, uint finalWidth)
{
using (var sourceStream = await BigFile.OpenAsync(FileAccessMode.Read))
{
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(sourceStream);
BitmapTransform transform = new BitmapTransform() { ScaledHeight = finalHeight, ScaledWidth = finalWidth };
PixelDataProvider pixelData = await decoder.GetPixelDataAsync(
BitmapPixelFormat.Rgba8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.RespectExifOrientation,
ColorManagementMode.DoNotColorManage);
InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ras);
encoder.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Premultiplied, finalWidth, finalHeight, 96, 96, pixelData.DetachPixelData());
await encoder.FlushAsync();
var bb = new byte[ras.Size];
await ras.ReadAsync(bb.AsBuffer(), (uint)ras.Size, InputStreamOptions.None);
return bb;
}
}