ビットマップ画像を縮小して表示する方法について

解決


かかし  2010-02-15 13:53:26  No: 71399  IP: [192.*.*.*]

お世話になります。

現在、VS2005C++にてディスク上のビットマップファイルを
読み込んでダイアログベースのピクチャボックスに
ビットマップ表示しています。
StretchBlt()を用いて、ピクチャボックスのサイズに合わせて
画像を縮小して表示させたいのですが、画像を縮小表示できません。

何方か御教え頂けないでしょうか。

以下がコードとなります。
CImage img1;
CBitmap *myBMP1;
CDC *pDC1 = m_pict1.GetDC();
CDC myDC1;
BITMAP Bmp_info1;


CRect rect1;

m_pict1.GetClientRect(&rect1);
pDC1->Rectangle(&rect1);
CClientDC myPictDC1(&m_pict1);
myPictDC1.FillSolidRect(rect1, RGB(255, 255, 255));

img1.Load(imgFilePath);
myBMP1 = CBitmap::FromHandle(img1);

myBMP1->GetBitmap(&Bmp_info1);
height = Bmp_info1.bmHeight;
width = Bmp_info1.bmWidth;

myDC1.CreateCompatibleDC(pDC1);
CBitmap *oldBMP1 = myDC1.SelectObject(myBMP1);
//pDC1->BitBlt(0, 0, 100, 100, &myDC1, 0,0,SRCCOPY);
pDC1->SetStretchBltMode(HALFTONE);
pDC1->StretchBlt(0, 0, width, height, &myDC1, 0, 0, width, height, SRCCOPY);
myDC1.SelectObject(oldBMP1);

m_pict1.ReleaseDC(pDC1);
myBMP1->DeleteObject();
myDC1.DeleteDC();

編集 削除
みい  2010-02-15 15:15:39  No: 71400  IP: [192.*.*.*]

同じサイズ指定してたら縮小されませんて(^^;)

編集 削除
かかし  2010-02-16 09:00:39  No: 71401  IP: [192.*.*.*]

有難う御座いました。

以下のコードに修正したところ縮小されました。
CFile file;

// ファイルのオープン
if( file.Open(imgFilePath, CFile::modeRead | CFile::typeBinary) == FALSE ) {
  return;
}
// メモリを確保し、データを読み込む
m_pDib = (BYTE*)new char[file.GetLength()];
file.Read(m_pDib, file.GetLength());

// BITMAPINFOHEADER構造体の取得
m_pBMFH = (BITMAPFILEHEADER*)m_pDib;

// 読み込んだファイルの形式をチェック
if( m_pBMFH->bfType != *((WORD*)"BM")) {
    file.Close();
    return;
}

// その他の構造体やデータ領域へのポインタの設定
m_pBMIH = (BITMAPINFOHEADER*)(m_pDib + sizeof(BITMAPFILEHEADER));
m_pBMI = (BITMAPINFO*)m_pBMIH;
m_pData = m_pDib + m_pBMFH->bfOffBits;
// ファイルのクローズと終了(正常終了)
file.Close();
CDC *pDC1 = m_pict1.GetDC();
m_pict1.GetClientRect(&m_rect1);
pDC1->SetStretchBltMode(HALFTONE);
::StretchDIBits(pDC1->GetSafeHdc(),
0, 0, m_rect1.right, m_rect1.bottom,  // 転送先
0, 0, m_pBMIH->biWidth, m_pBMIH->biHeight,  // 転送元
m_pData, m_pBMI, DIB_RGB_COLORS, SRCCOPY);

編集 削除