Jaa


ブログ用 画像ユーティリティ ⑥ 縮小画像の生成

ユーザーコントロール 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;
}