お世話になります。
現在、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();
同じサイズ指定してたら縮小されませんて(^^;)
編集 削除有難う御座いました。
以下のコードに修正したところ縮小されました。
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);