Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Масштабирование картинки.

Масштабировать картинки можно при помощи функции StretchBlt. Подобно функции BitBlt, StretchBlt копирует содержимое битмапа из исходного DC в битмап конечного DC. Однако, в отличие от функции BitBlt, StretchBlt масштабирует изображение основываясь на разрешении исходного и конечного прямоугольников. Если исходный прямоугольник больше чем конечный, то изображение будет сжато и наоборот, если исходный прямоугольник будет меньше конечного - то растянуто.

В случае сжатия изображения, StretchBlt удаляет данные о цвете согласно указанному режиму масштабирования:

Режим масштабирования Метод
BLACKONWHITE Делает логическую операцию AND для цвета как исчезнувших пикселей, так и оставшихся.
WHITEONBLACK Делает логическую операцию OR для цвета как исчезнувших пикселей, так и оставшихся.
COLORONCOLOR Полностью убирает данные о цвете удалённых пикселей.
HALFTONE Апроксимирует оригинальный (исходный) цвет в конечный.


Режим масштабирования можно установить при помощи функции SetStretchBltMode.

Следующий пример показывает как отобразить картинку изначального размера и как отобразить картинку в два раза большего размера чем изначальный. (Используется режим масштабирования поумолчанию.)

    hdcScaled = CreateCompatibleDC(hdcScreen);
 
     hbmScaled = CreateCompatibleBitmap(hdcScreen,
                     GetDeviceCaps(hdcScreen, HORZRES) * 2,
                     GetDeviceCaps(hdcScreen, VERTRES) * 2);
 
     if (hbmScaled == 0)
         errhandler("hbmScaled", hwnd);
 
     // Выбираем битмапы в совместимом DC.
 
     if (!SelectObject(hdcScaled, hbmScaled))
         errhandler("Scaled Bitmap Selection", hwnd);
 
 case WM_COMMAND:     // сообщение из меню приложения
     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;

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS