Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > масштабирование CImage


Автор: Leopard25 3.7.2004, 17:10
В m_jpgImage загружаю изображение и вывожу его на экран в OnDraw.
Если вывожу 1:1 всё нормально , а если меняю размеры оно искажается.



CImage m_jpgImage;

// меняю размеры
int Height = 300;
int cor = (m_jpgImage.GetHeight()*100)/(Height);
int Weight = (int)((m_jpgImage.GetWidth()*100)/cor);

m_jpgImage.Draw(pDC->m_hDC,550,50,Weight,Height);


Я что-то нетак делаю ?

Автор: chipset 3.7.2004, 21:35
Цитата
void CMyPaintView::OnPaint()
{
    CDC *view =
new CDC;
    CPaintDC dc(
this); // device context for painting
   
image.Load("image.bmp"); //Загрузка изображения
   
SetStretchBltMode(dc.GetSafeHdc(),HALFTONE);//Установка "масштабирования
   
StretchBlt
        (dc.GetSafeHdc(),
//Dc
       
0,0,200 ,200,//Масштабирование
       
image.GetDC(),//Source
       
0,0,image.GetWidth(),image.GetHeight()//Получение исх
        //одного изображения
       
,SRCCOPY);//Установка параметра копирования
    // TODO: Add your message handler code here
    // Do not call CScrollView::OnPaint() for painting messages
}

Кстати... CImage у меня обьявлен в главном модуле так что здесь его не видно...smile.gif

Автор: chipset 3.7.2004, 21:46
А суть в том что я не пользуюсь .Draw а получаю хэндел CImage'а и из него уже копирую обычным средствами..

Автор: Leopard25 4.7.2004, 09:45

Теперь первая картинка показывается нормально , а при переключении на другую происходит ошибка :

Debug Assertion Failed!
..................
..................altimage.h
Line: 574

Expression m_hDC==0






загружаю картинку:

m_jpgImage.Destroy();
m_jpgImage.Load(m_strPathPict);


void CPicBackGroundView::OnDraw(CDC* pDC)
{
// вывод изображения
SetStretchBltMode(pDC->GetSafeHdc(),HALFTONE);

StretchBlt
(pDC->GetSafeHdc(), //Dc
550,50,200 ,200,//Масштабирование
m_jpgImage.GetDC(),//Source
0,0,m_jpgImage.GetWidth(),m_jpgImage.GetHeight() ,SRCCOPY);//Установка параметра копирования
}

Автор: chipset 4.7.2004, 09:50
Это пока лечу только release модом..

Автор: Leopard25 4.7.2004, 12:19
Я разобрался .
Так работает :

int Height = 300;
int cor = (m_jpgImage.GetHeight()*100)/(Height);
int Weight = (int)((m_jpgImage.GetWidth()*100)/cor);

CDC dcMem2;
dcMem2.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,m_jpgImage.GetWidth(),m_jpgImage.GetHeight());
dcMem2.SelectObject(&bmp);
dcMem2.PatBlt(0,0,m_jpgImage.GetWidth(),m_jpgImage.GetHeight(),WHITENESS);


m_jpgImage.BitBlt(dcMem2,0,0,m_jpgImage.GetWidth(),m_jpgImage.GetHeight()
,0,0,SRCCOPY);


SetStretchBltMode(pDC->GetSafeHdc(),HALFTONE);//Установка "масштабирования

StretchBlt
(pDC->GetSafeHdc(), //Dc
550,50, Weight,Height,//Масштабирование
dcMem2.m_hDC,//Source
0,0,m_jpgImage.GetWidth(),m_jpgImage.GetHeight()//Получение исх
//одного изображения
,SRCCOPY);//Установка параметра копирования

dcMem2.PatBlt(0,0,m_jpgImage.GetWidth(),m_jpgImage.GetHeight(),WHITENESS);

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