ユニバーサルWindowsプロジェクトでトランスペアレントなPNGイメージのサイズを変更したいが、透明性が失われる。 Stack Overflowのこの記事に似ています。 Why does resizing a png image lose transparency? Stack Overflowで私の質問に関連するすべての記事をチェックしましたが、どれも正しい答えがありません。 誰かが私にそれを理解するのを助けることができますか?透明性を失うことなく、UWPプロジェクトでPNGのサイズを変更しますか?
public static async Task<BitmapImage> ResizedImage(StorageFile ImageFile, int maxWidth, int maxHeight)
{
IRandomAccessStream inputstream = await ImageFile.OpenReadAsync();
BitmapImage sourceImage = new BitmapImage();
sourceImage.SetSource(inputstream);
var origHeight = sourceImage.PixelHeight;
var origWidth = sourceImage.PixelWidth;
var ratioX = maxWidth/(float)origWidth;
var ratioY = maxHeight/(float)origHeight;
var ratio = Math.Min(ratioX, ratioY);
var newHeight = (int)(origHeight * ratio);
var newWidth = (int)(origWidth * ratio);
sourceImage.DecodePixelWidth = newWidth;
sourceImage.DecodePixelHeight = newHeight;
return sourceImage;
}
を失うことなく、それのサイズを変更するコードの一部ですか?ビットマップを表示するImageコントロールの幅と高さを簡単に設定できます。 'Stretch'プロパティを例えばに設定すると、ビットマップを適切にスケーリングします。 「統一」。 – Clemens
@クレメンス:問題はイメージを表示するだけではありません。あなたが考えるようにそれは簡単ではありません。 –
なぜ透明性が失われるのか分かりません。 BitmapImageは透明なPNGをサポートしており、DecodePixelWidthプロパティとDecodePixelHeightプロパティの設定だけが変更されません。あなたのコードをテストしたところ、私にとってはうまくいきました。つまり、ビットマップは透過的なままです。 – Clemens