Re[8]: вывод картинки с ftp-сервера
От: evgeniy_ptz Россия  
Дата: 29.05.10 13:37
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 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

что нужно конкретно в коде подредактировать, можете написать, а не догадки строить.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.