Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблемы с BMP


Автор: NitroM 27.11.2005, 05:39
Вот такая вот лажа : надо что б открывало бмп ....
Код

void CBMPOpenDlg::OnStnClickedInsertImage() 
{ 
   CString m_sFileName; 
   CFileDialog fileDialog(TRUE,NULL,"*.bmp"); 
   int result = fileDialog.DoModal(); 
   if (result==IDOK) 
   { 
      m_sFileName=fileDialog.GetPathName(); 
      HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
      m_sFileName, IMAGE_BITMAP, 0, 0, 
      LR_LOADFROMFILE | LR_CREATEDIBSECTION); 
      m_bmpBitmap.Detach(); 
      m_bmpBitmap.Attach(hBitmap); 
       
   } 
} 
void CBMPOpenDlg::OnDraw() 
{ 
   CDC* pDC; 
   CBMPOpenDlg* pDoc = GetDocument(); 
   ASSERT_VALID(pDoc); 
   CDC dcTemp; 
   dcTemp.CreateCompatibleDC(pDC); 
   dcTemp.SelectObject(pDoc->m_bmpBitmap); 
   BITMAP bm; 
   if (pDoc->m_bmpBitmap.GetSafeHandle()!=NULL) 
   pDoc->m_bmpBitmap.GetBitmap(&bm); 
   pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcTemp,0,0,SRCCOPY); 
} 
void CBMPOpenDlg::OnBnClickedNewPiic() 
{ 
   OnStnClickedInsertImage(); 
   OnDraw();    
}



Есть мысль что дело в
Код
CDC* pDC; 
....
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcTemp,0,0,SRCCOPY);  

но на этом она заканчиваються....

Автор: Mad 27.11.2005, 13:48
[quote=NitroM, 27.11.2005, 04:39]CDC* pDC;
Код

CDC *pDC = pView->GetDC();

Автор: NitroM 27.11.2005, 21:36
[QUOTE=Mad,27.11.2005, 13:48][quote=NitroM, 27.11.2005, 04:39]CDC* pDC;
Код

CDC *pDC = pView->GetDC();
[/QUOTE]
неа... а под PView дефайны нужны какието нибудь?

Автор: Mad 28.11.2005, 04:35
Цитата(NitroM @ 27.11.2005, 20:36)
а под PView дефайны нужны какието нибудь

Под pView подразумеваеться указатель на окно, в котором надо отрисовать битмап

Автор: Smerch 1.12.2005, 12:39
NitroM если нужно я могу прислать тебе по email нормальный клас по работе с DIB.
А вообще я делаю так......
Цитата
void CStaticExt::OnPaint()
{

              CPoint origin(...,...)
                CSize size(....,.....)
CPaintDC dc(this);
if(m_lpBMIH == NULL) return FALSE;//m_lpBMIH это LPBITMAPINFOHEADER
if(m_hPalette != NULL) {
  ::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);
}
dc.SetStretchBltMode(COLORONCOLOR);
::StretchDIBits(dc.GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,
  0, 0, m_lpBMIH->biWidth, m_lpBMIH->biHeight,
  m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, SRCCOPY);
}
}

Все работает! Но в этом случае ты должен сначало через CFile считать палитру, заголовок изображения и само изображение...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)