UWP アプリケーションで画像のサイズを変更しようとしています。ほとんどの場合、追加されたコードは機能しますawait encoder.FlushAsync();
が、ArgumentException
.
MSDN ( https://msdn.microsoft.com/en-us/library/windows/apps/windows.graphics.imaging.bitmapencoder.bitmaptransform.aspx ) にアクセスしたところ、(「備考」で) 教えてくれました。 :
BitmapTransform メンバーを使用して、インデックス付きのピクセル形式で格納された画像をスケーリングしようとすると、FlushAsync は HRESULT WINCODEC_ERR_INVALIDPARAMETER で失敗します。代わりに、GetPixelDataAsync を使用してスケーリングされたピクセル データを取得し、SetPixelData を使用してエンコーダーに設定する必要があります。
私はそれをやろうとしました.2つのコメント行を見てください(繰り返しのために私にはどういうわけか間違っているように見えます). 2行目(私がしようとしているところSetPixelData
)で、エンコーダーは私にbuffer allocated not sufficient
例外を与えます。
var decoder = await BitmapDecoder.CreateAsync(streamToReadFrom.AsStream().AsRandomAccessStream());
if (decoder.OrientedPixelHeight > height ||
decoder.OrientedPixelWidth > width)
{
var resizedStream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(resizedStream, decoder);
encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant;
encoder.BitmapTransform.ScaledHeight = newHeight;
encoder.BitmapTransform.ScaledWidth = newWidth;
//"buffer allocated not sufficient"
// var pd = await decoder.GetPixelDataAsync(BitmapPixelFormat.Rgba16, BitmapAlphaMode.Ignore,
// encoder.BitmapTransform, ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);
// encoder.SetPixelData(BitmapPixelFormat.Rgba16, BitmapAlphaMode.Ignore,
// decoder.OrientedPixelWidth, decoder.OrientedPixelHeight, decoder.DpiX, decoder.DpiY, pd.DetachPixelData());
// write out to the stream
// might fail cause https://msdn.microsoft.com/en-us/library/windows/apps/windows.graphics.imaging.bitmapencoder.bitmaptransform.aspx
await encoder.FlushAsync();
// Read out resizedStream and return
}
この問題を引き起こす画像の例: http://www.spiegel.de/images/image-1028227-hppano-lqbn.jpg . 単体テストはこちら: https://github.com/famoser/OfflineMedia/blob/master/Famoser.OfflineMedia.UnitTests/Presentation/ImageResizeTest.cs
どうすれば回避できArgumentException
ますか?画像が「インデックス付きピクセル形式」であることを確認するにはどうすればよいですか? また、この形式のサイズを変更するにはどうすればよいですか?