C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Нетология

 Масштабирование картинки / Bitmap, Region / Графика

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

Масштабировать картинки можно при помощи функции 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;

 

 





http://axiomadental.ru/ керамические виниры цена за один зуб.
Letyshops [lifetime]