Windows 8 アプリを開発しています。サイズ変更された画像をバイトとして取得したい。したがって、私のメソッドは StorageFile、高さと幅を取得し、私byte[]
またはサイズ変更された画像を返します。これまでに試したことを以下に示します。私の努力により、すべての値が 0 の byte[] が返されます。
PS:サイズ変更された新しいStorageFileを作成したくありません。また、1つのメソッドだけに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;
}
}