Занятие 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, 0, txGetExtentX() , txGetExtentY(), backImage);
Для изображений, которые рисуются на фоновой картинке больше подходит функция
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), поэтому создается эффект мигания шариков и снежинок.
Посмотреть текст программы
Результат работы программы