次の Image オブジェクトがあるとします (これは ListView オブジェクトの DataTemplate にあります)。
<Image Source="{Binding ImgSource}" ImageOpened="img_ImageOpened" />
高品質のバイキュービック補間画像を取得するにはどうすればよいですか? (画面上では、この画像のサイズはソース PNG よりも小さくなっていますが、デフォルトのサイズ変更は低品質の「最近傍」補間で実行されているように見えます)。
データ バインディングのみに依存したいので (関連付けられたデータ項目の ImgSource が変更されるたびに、Image コンテンツが変更される必要があります)、ImageOpened ハンドラーを設定し、読み込まれたばかりの画像をより高品質のものに変更しようとしました。 .
残念ながら、以下のコードは機能しないようです (空の画像が表示されるだけです)。
async void LoadImage(Image imgControl, string source)
{
try
{
StorageFile file = await StorageFile.GetFileFromPathAsync(source);
IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read);
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder);
enc.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Cubic;
enc.BitmapTransform.ScaledHeight = Convert.ToUInt32(imgControl.ActualHeight);
enc.BitmapTransform.ScaledWidth = Convert.ToUInt32(imgControl.ActualWidth);
await enc.FlushAsync();
Windows.UI.Xaml.Media.Imaging.BitmapImage bImg = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
bImg.SetSource(ras);
imgControl.Source = bImg;
}
catch (Exception e)
{
return;
}
}
void img_ImageOpened(object sender, RoutedEventArgs e)
{
Image imgControl = (Image)sender;
LoadImage(imgControl, <path to PNG file>);
}