ブログ用 画像ユーティリティ ⑥ 縮小画像の生成
ユーザーコントロール VgaBitmapUC クラスでは、ファイル名が更新されると、UpdateImageメソッドが呼び出され、その中でVGAサイズの画像とモザイク用のビットマップをデコードするCreateSmallImageメソッドを呼び出します。
デコード時に画像のサイズを指定します。 BitmapImage.PixelDecodeWidth を、VGA用には640(_vgaWidth)、モザイク用には32(_vgaWidth / _scale)に指定します。ただし、縦が長い画像の場合には縦を(BitmapImage.PixelDecodeHeightを )640に指定します。縦横比はデコード時に自動的に維持してくれます。どちらのBitmapImageも以降で変更しないのでFreezeして返します。
private readonly int _vgaWidth = 640;
private readonly int _scale = 20;
/// <summary>
/// filenameから指定サイズのBitmapImageを返す
/// </summary>
/// <param name="width"></param>
/// <returns></returns>
private BitmapImage CreateSmallImage(int width, string filename)
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(filename);
image.DecodePixelWidth = width;
image.EndInit();
//縦長画像のとき
if (image.PixelWidth < image.PixelHeight)
{
image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(filename);
image.DecodePixelHeight = width;
image.EndInit();
}
image.Freeze();
return image;
}