![]()
前回までにウインドウにJPEG画像を表示する処理を作成した。しかし表示される画像は縦横比に関係なく拡大縮小されてしまっている。そのため今回は縦横比を保ったまま拡大縮小させる。
ImageViewerView.hを開く。ここで赤枠内を修正する。この部分は画像表示をするクライアント領域の取得と画像の描画をしている。
DraiImage()は第一引数にImage、それ以降の4引数はそれぞれ描画開始XY位置と描画サイズを示している。
//画像表示サイズ計算
RECT rect;
UINT nImageWidth;
UINT nImageHeight;
UINT nWindowWidth;
UINT nWindowHeight;
UINT nWidth;
UINT nHeight;
//画像サイズ
nImageWidth = pImage->GetWidth();
nImageHeight = pImage->GetHeight();
//クライアント領域サイズ
GetClientRect(&rect);
nWindowWidth = rect.right - rect.left;
nWindowHeight = rect.bottom - rect.top;
if((double)nImageWidth / nImageHeight < (double)nWindowWidth / nWindowHeight)
{
//クライアント領域の方が横長なら、縦方向はいっぱいに表示
nHeight = nWindowHeight;
nWidth = nWindowHeight * nImageWidth / nImageHeight;
}
else
{
//画像の方が横長なら、横方向はいっぱいに表示
nWidth = nWindowWidth;
nHeight = nWindowWidth * nImageHeight / nImageWidth;
}
//画像表示
cGraphics.DrawImage(pImage,(REAL)0,(REAL)0,(REAL)nWidth,(REAL)nHeight);

実際に実行してみると縦横比が崩れずに拡大縮小できるようになった。
