Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, evgeniy_ptz, Вы писали:
_>>Написал код по работе с CImage, он загружает картинку и прорисовывает в элементе picture control на диалоге.
_>>_>>CStatic m_photo;
_>>CImage image;
_>>image.Load("670.jpg");
_>>HBITMAP hbmp=m_photo.GetBitmap();
_>>CBitmap* bmp=CBitmap::FromHandle(hbmp);
_>>CDC dc;
_>>dc.CreateCompatibleDC(NULL);
_>>CBitmap* old=dc.SelectObject(bmp);
_>>m_photo.SetBitmap(image);
_>>int x=0;
_>>int y=0;
_>>image.AlphaBlend(dc,x,y,0xff,AC_SRC_OVER);
_>>dc.SelectObject(old);
_>>m_photo.Invalidate();
_>>только вот картинку он в объект image загружает, а почему то саму картинку не прорисовывает, только чертит рамку по размеру фото. Что тут не так?(
К>Если это сплошной отрывок кода, то это бред!
К>А если это несколко фрагментов, то неплохо бы показать, какой фрагмент в какой функции.
К>Зачем загруженная картинка блендится со старой картинкой из контрола?
К>Куда девается старая картинка? (Из контрола мы её вытащили и засунули в контекст; а затем вытащили из контекста и... и всё).
К>Куда девается новая картинка? Хэндл на неё засунули в контрол. А потом вышли из функции и грохнули СImage, и что случилось с хэндлом?
К>По уму, надо завести CImage m_image на всё время жизни окна. В OnCreate/OnInitDialog загрузить туда картинку, затем передать хэндл в контрол, и всё.
void CReaderDlg::OnTimer(UINT nIDEvent)
{
CDialog::OnTimer(nIDEvent);
m_reader = new CReader;
if(!(m_reader->Reader_Init()))
EndDialog(0);
if(!(m_reader->Read_serial_number()))
EndDialog(0);
if(m_reader->Card_read())
{
//if (m_foto.IsEmpty())
//return false;
m_birthday_CTRL.SetWindowText(m_reader->birth);
m_surname_CTRL.SetWindowText(m_reader->Familiya);
m_name_CTRL.SetWindowText(m_reader->Imya);
m_patronymic_CTRL.SetWindowText(m_reader->Ot4estvo);
m_kurs_CTRL.SetWindowText(m_reader->Kurs);
m_fakultet_CTRL.SetWindowText(m_reader->Fakultet);
UpdateData(FALSE);
m_foto = m_reader->Foto;
image.Load(LPCTSTR(m_foto));
int w = image.GetWidth();
int h = image.GetHeight();
int tnh = 200;
int tnw = 200 * w / h;
int bpp = image.GetBPP();
image2.Create(tnw,tnh,bpp);
HDC h2=image2.GetDC();
SetStretchBltMode(h2,HALFTONE);
image.StretchBlt(h2,0,0,tnw,tnh,SRCCOPY);
image2.ReleaseDC();
HBITMAP hbmp = m_photo.GetBitmap();
CBitmap *bmp = CBitmap::FromHandle(hbmp);
CDC dc;
dc.CreateCompatibleDC(NULL);
CBitmap* old = dc.SelectObject(bmp);
m_photo.SetBitmap(image2);
dc.SelectObject(old);
m_photo.Invalidate();
}
else
EndDialog(0);
}
значит выводит картинку, но падает с ошибкой
Debug Assertion Failed!
Program:...
File: c:\program files\microsoft visual studio 8\vc\atlmfc\include\atlimage.h
Line:503
Expression: m_hBitmap==0
что нужно конкретно в коде подредактировать, можете написать, а не догадки строить.
Спасибо.