17. Изображения

Занятие 17


Это надо знать

В библиотеке TXLib.h содержатся функции для работы с растровыми изображениями. Использование фотографий и изображений, созданных в графических редакторах, расширяют возможности языка программирования.

Функция txLoadImage загружает рисунок из файла в оперативную память. Загружать можно рисунки в формате BMP. Каждому загруженному рисунку, хранящемуся во время работы программы  в оперативной памяти, присваивается целочисленный описатель (дескриптор):

HDC nameimage  =   txLoadImage ("имя файла");

Разместим файлы с изображениями фона (backgr.bmp), елки (tree.bmp), Деда Мороза (santa.bmp), снеговика (snowman.bmp), зайца (hare.bmp), оленя (renne.bmp) и пингвина (tux.bmp) в папке images.

Загрузим фоновое изображение в оперативную память:

    HDC backImage  = txLoadImage ("images/backgr.bmp");

Проверим, загружено ли изображение фона:

    if (!backImage)      {txMessageBox ("Ошибка при загрузке backgr.bmp");   return 1;}

Аналогично загрузим и другие изображения. Например, изображение Деда Мороза:

    HDC santaImage     = txLoadImage ("images/santa.bmp");
    if (!santaImage)     {txMessageBox ("Ошибка при загрузке santa.bmp");    return 1;}

Функция txBitBlt выводит рисунок на экран:

txBitBlt (txDC(), x, y, sizeX, sizeY, nameimage);

txDC()         - возвращает дескриптор
x                   - x-координата верхнего левого угла изображения
y                   - y-координата верхнего левого угла изображения
sizeX            - ширина копируемого изображения
sizeY            - высота копируемого изображения
nameimage - целочисленная переменная, которая хранит файл изображения

Функция txBitBlt подходит для рисования фонового изображения:

txBitBlt (txDC(), 0, 0, 1300, 748, backImage);

Обычно, ширина и высота графического окна задается по ширине и высоте картинки фонового изображения. Тогда параметры sizeX и sizeY можно указывать как txGetExtentX() - ширина окна и txGetExtentY() - высота окна:

txBitBlt (txDC(), 0, 0txGetExtentX() txGetExtentY(), backImage);

Для изображений, которые рисуются на фоновой картинке больше подходит функция

txTransparentBlt (txDC(), x, y, sizeX, sizeY, nameimage, 0, 0, transColor);

transColor - цвет, который будет считаться прозрачным

Для того, чтобы изображение выводилось без фона, в графическом редакторе закрасим фон картинки цветом, который не используются в изображении (лиловый, салатовый, бирюзовый и т.д.)

RGB (0, 250, 250) - фоновый цвет, который будет удален.

Например:

txTransparentBlt (txDC(), 367,     0, 566, 800, treeImage,   0, 0, RGB (0, 250, 250));
txTransparentBlt (txDC(), 800, 410, 300, 290, santaImage, 0, 0, RGB (0, 250, 250));

Обратите внимание, если размеры картинки задать неверно, то она не будет выведена на экран.

После того, как картинка была использована, ее необходимо выгрузить из памяти, для этого служит функция txDeleteDC:

txDeleteDC (nameimage);

Например:


txDeleteDC (backImage);
txDeleteDC (santaImage);
txDeleteDC (treeImage);



Пример

В программе использованы изображения:

backgr.bmp  - фоновое изображение
santa1.bmp  - изображение Деда Мороза на прозрачном фоне
tree1.bmp    - изображение елки на прозрачном фоне
deer.bmp     - изображение оленя на прозрачном фоне
new.bmp     - изображение шариков на прозрачном фоне

Файлы изображений

Шарики на елке рисуются случайным цветом, снежинки также рисуются случайным цветом. Функции рисования снежинок и елочных шариков вызываются в цикле (до нажатой клавиши Escape), поэтому создается эффект мигания шариков и снежинок.

Посмотреть текст программы

Результат работы программы

Домашнее задание

Создать открытку, используя функции работы с изображениями.