powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Масштабирование изображения (MSVC - CBitmap)
3 сообщений из 3, страница 1 из 1
Масштабирование изображения (MSVC - CBitmap)
    #34020077
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, возникла проблема с масшатбированием изображений.. Если кто с этим сталкивался, помогите плз.
В общем дело такое, вывожу bmp'ху на экран:

HGDIOBJ hBitmap;
CBitmap bitmap;

hBitmap = (HBITMAP)LoadImage(NULL, L"maps\\map_1.bmp", IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
bitmap.Attach(hBitmap);

CPaintDC dc1(this);
CBitmap *pOldBmp;

CDC BmpDc;
BmpDc.CreateCompatibleDC(&dc1);
pOldBmp = (CBitmap *)BmpDc.SelectObject(&bitmap);
dc1.BitBlt(300,10,1000,1000,&BmpDc,0,0,SRCCOPY);

BmpDc.SelectObject(pOldBmp);

тут всё ок, выводится.
Но когда пытаюсь заюзать:

SetStretchBltMode(dc1.GetSafeHdc(),HALFTONE);
StretchBlt(dc1.GetSafeHdc(),0,0,200,200,&BmpDc,0,0,400,400,SRCCOPY);

вместо dc1.BitBlt, получаю:

error C2664: 'StretchBlt' : cannot convert parameter 6 from 'CDC *' to 'HDC'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Никак не могу понять, что должно идти 6-ым аргументом.


И второй вопрос, почему-то не могу использовать класс CImage в MSVC 2005.
Какую библиотеку или хэйдер надо для него подключать?
...
Рейтинг: 0 / 0
Масштабирование изображения (MSVC - CBitmap)
    #34022055
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nop....Никак не могу понять, что должно идти 6-ым аргументом. ..


вот пример из МСДНа...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
The following example code is taken from an application that displays an image either at its original size or at twice its original size. (This application uses the default stretch mode.) 

    hdcScaled = CreateCompatibleDC(hdcScreen); 
 
    hbmScaled = CreateCompatibleBitmap(hdcScreen, 
                    GetDeviceCaps(hdcScreen, HORZRES) *  2 , 
                    GetDeviceCaps(hdcScreen, VERTRES) *  2 ); 
 
    if (hbmScaled ==  0 ) 
        errhandler("hbmScaled", hwnd); 
 
    // Select the bitmaps into the compatible DC. 
 
    if (!SelectObject(hdcScaled, hbmScaled)) 
        errhandler("Scaled Bitmap Selection", hwnd); 
 
case WM_COMMAND:     // message: command from application menu 
    switch(wParam) 
    { 
        case IDM_SCALEX1: 
            if (fBlt)
            { 
                 fScaled = FALSE; 
                 hdcWin = GetDC(hwnd); 
                 BitBlt(hdcWin, 
                     0 , 0 , 
                    bmp.bmWidth, bmp.bmHeight, 
                    hdcCompatible, 
                     0 , 0 , 
                    SRCCOPY); 
                 ReleaseDC(hwnd, hdcWin); 
            } 
            break; 
 
        case IDM_SCALEX2: 
            if (fBlt)
            { 
                 fScaled = TRUE; 
                 StretchBlt(hdcScaled, 
                      0 ,  0 , 
                     bmp.bmWidth *  2 , bmp.bmHeight *  2 , 
                     hdcCompatible, 
                      0 ,  0 , 
                     bmp.bmWidth, bmp.bmHeight, 
                     SRCCOPY); 
 
                 hdcWin = GetDC(hwnd); 
                 BitBlt(hdcWin, 
                     0 , 0 , 
                    bmp.bmWidth, bmp.bmHeight, 
                    hdcScaled, 
                     0 , 0 , 
                    SRCCOPY); 
                 ReleaseDC(hwnd, hdcWin); 
            } 
            break; 

как извлекать HDC из CDC...
ну например так..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void OPS_CalcStringDC(CDC* pDC, CString& strIn, CString& strOut, CRect rect, SIZE* pSize)
{
	ASSERT(pDC);
	if(pDC == NULL)
		return;
	CString strTmp;
	CRect tmp_rect;

	tmp_rect = rect;
//calc item rect
	::DrawText(pDC->GetSafeHdc(),
		strIn,
		strIn.GetLength(),
		&tmp_rect, 
		DT_CALCRECT | DT_WORDBREAK);
//		DT_CALCRECT | DT_CENTER | DT_WORDBREAK);
бла-бла-бла


(круглый)
...
Рейтинг: 0 / 0
Масштабирование изображения (MSVC - CBitmap)
    #34022315
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да да, уже разобрался, спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Масштабирование изображения (MSVC - CBitmap)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]