![]() |
TX Library Help – Version: 00173a, Revision: 171
PROJECT_BRIEF=
|
Инициализация библиотеки | |
HWND | txCreateWindow (double sizeX, double sizeY, bool centered=true) |
Создание окна рисования | |
HDC & | txDC () tx_nodiscard |
Возвращает холст (дескриптор контекста рисования, HDC) окна рисования TXLib. | |
RGBQUAD * | txVideoMemory () tx_nodiscard |
Возвращает буфер памяти, связанный с холстом (HDC) TXLib. | |
bool | txSetDefaults (HDC dc=txDC()) |
Установка параметров рисования по умолчанию. | |
bool | txOK () tx_nodiscard |
Проверка правильности работы библиотеки | |
POINT | txGetExtent (HDC dc=txDC()) tx_nodiscard |
Возвращает размер окна, картинки или холста в виде структуры POINT. | |
int | txGetExtentX (HDC dc=txDC()) tx_nodiscard |
Возвращает ширину окна или холста. | |
int | txGetExtentY (HDC dc=txDC()) tx_nodiscard |
Возвращает высоту окна или холста. | |
HWND | txWindow () tx_nodiscard |
Возвращает дескриптор окна рисования | |
const char * | txVersion () tx_nodiscard |
Возвращает строку с информацией о текущей версии библиотеки. | |
unsigned | txVersionNumber () tx_nodiscard |
Возвращает номер версии библиотеки. | |
const char * | txGetModuleFileName (bool fileNameOnly=true) tx_nodiscard |
Возвращает имя исполняемого файла или изначальный заголовок окна TXLib. | |
Установка цветов и режимов рисования | |
enum | txColors { TX_BLACK = RGB ( 0, 0, 0), TX_BLUE = RGB ( 0, 0, 128), TX_GREEN = RGB ( 0, 128, 0), TX_CYAN = RGB ( 0, 128, 128), TX_RED = RGB (128, 0, 0), TX_MAGENTA = RGB (128, 0, 128), TX_BROWN = RGB (128, 128, 0), TX_ORANGE = RGB (255, 128, 0), TX_GRAY = RGB (160, 160, 160), TX_DARKGRAY = RGB (128, 128, 128), TX_LIGHTGRAY = RGB (192, 192, 192), TX_LIGHTBLUE = RGB ( 0, 0, 255), TX_LIGHTGREEN = RGB ( 0, 255, 128), TX_LIGHTCYAN = RGB ( 0, 255, 255), TX_LIGHTRED = RGB (255, 0, 128), TX_LIGHTMAGENTA = RGB (255, 0, 255), TX_PINK = RGB (255, 128, 255), TX_YELLOW = RGB (255, 255, 128), TX_WHITE = RGB (255, 255, 255), TX_TRANSPARENT = 0xFFFFFFFF, TX_NULL = TX_TRANSPARENT, TX_BLM = TX_BLACK, TX_white = TX_WHITE, TX_HUE = 0x04000000, TX_SATURATION = 0x05000000, TX_LIGHTNESS = 0x06000000 } |
Названия предопределенных цветов. Подробнее... | |
COLORREF | RGB (int red, int green, int blue) |
Создает (смешивает) цвет из трех базовых цветов (компонент). | |
HPEN | txSetColor (COLORREF color, double thickness=1, HDC dc=txDC()) |
Устанавливает текущий цвет и толщину линий, цвет текста. | |
COLORREF | txGetColor (HDC dc=txDC()) tx_nodiscard |
Возвращает текущий цвет линий и текста. | |
HBRUSH | txSetFillColor (COLORREF color, HDC dc=txDC()) |
Устанавливает текущий цвет заполнения фигур. | |
COLORREF | txGetFillColor (HDC dc=txDC()) tx_nodiscard |
Возвращает текущий цвет заполнения фигур. | |
unsigned | txExtractColor (COLORREF color, COLORREF component) tx_nodiscard |
Извлекает цветовую компоненту (цветовой канал) из смешанного цвета. | |
COLORREF | txRGB2HSL (COLORREF rgbColor) tx_nodiscard |
Преобразует цвет из формата RGB в формат HSL. | |
COLORREF | txHSL2RGB (COLORREF hslColor) tx_nodiscard |
Преобразует цвет из формата HSL в формат RGB. | |
Рисование фигур | |
bool | txClear (HDC dc=txDC()) |
Стирает холст текущим цветом заполнения. | |
bool | txSetPixel (double x, double y, COLORREF color, HDC dc=txDC()) |
Рисует пиксель (точку на экране). | |
COLORREF | txGetPixel (double x, double y, HDC dc=txDC()) tx_nodiscard |
Возвращает текущий цвет точки (пикселя) на экране. | |
bool | txLine (double x0, double y0, double x1, double y1, HDC dc=txDC()) |
Рисует линию. | |
bool | txRectangle (double x0, double y0, double x1, double y1, HDC dc=txDC()) |
Рисует прямоугольник. | |
bool | txPolygon (const POINT points[], int numPoints, HDC dc=txDC()) |
Рисует ломаную линию или многоугольник. | |
bool | txEllipse (double x0, double y0, double x1, double y1, HDC dc=txDC()) |
Рисует эллипс. | |
bool | txCircle (double x, double y, double r) |
Рисует окружность или круг. | |
bool | txArc (double x0, double y0, double x1, double y1, double startAngle, double totalAngle, HDC dc=txDC()) |
Рисует дугу эллипса. | |
bool | txPie (double x0, double y0, double x1, double y1, double startAngle, double totalAngle, HDC dc=txDC()) |
Рисует сектор эллипса. | |
bool | txChord (double x0, double y0, double x1, double y1, double startAngle, double totalAngle, HDC dc=txDC()) |
Рисует хорду эллипса. | |
bool | txFloodFill (double x, double y, COLORREF color=TX_TRANSPARENT, DWORD mode=FLOODFILLSURFACE, HDC dc=txDC()) |
Заливает произвольный контур текущим цветом заполнения. | |
bool | txTriangle (double x1, double y1, double x2, double y2, double x3, double y3) |
Функция, которая должна бы рисовать треугольник. | |
void | txDrawMan (int x, int y, int sizeX, int sizeY, COLORREF color, double handL, double handR, double twist, double head, double eyes, double wink, double crazy, double smile, double hair, double wind) |
Рисует человечка. | |
Работа с текстом | |
bool | txTextOut (double x, double y, const char text[], HDC dc=txDC()) |
Рисует текст. | |
bool | txDrawText (double x0, double y0, double x1, double y1, const char text[], unsigned format=DT_CENTER|DT_VCENTER|DT_WORDBREAK|DT_WORD_ELLIPSIS, HDC dc=txDC()) |
Рисует текст, размещенный в прямоугольной области. | |
HFONT | txSelectFont (const char name[], double sizeY, double sizeX=-1, int bold=FW_DONTCARE, bool italic=false, bool underline=false, bool strikeout=false, double angle=0, HDC dc=txDC()) |
Выбирает текущий шрифт, его размер и другие атрибуты. | |
SIZE | txGetTextExtent (const char text[], HDC dc=txDC()) tx_nodiscard |
Вычисляет размеры текстовой надписи. | |
int | txGetTextExtentX (const char text[], HDC dc=txDC()) tx_nodiscard |
Вычисляет ширину текстовой надписи. | |
int | txGetTextExtentY (const char text[], HDC dc=txDC()) tx_nodiscard |
Вычисляет высоту текстовой надписи. | |
unsigned | txSetTextAlign (unsigned align=TA_CENTER|TA_BASELINE, HDC dc=txDC()) |
Устанавливает текущее выравнивание текста (влево/вправо/по центру). | |
LOGFONT * | txFontExist (const char name[]) tx_nodiscard |
Ищет шрифт по его названию. | |
Рисование в памяти (на "виртуальном холсте") и загрузка изображений | |
HDC | txCreateCompatibleDC (double sizeX, double sizeY, HBITMAP bitmap=NULL, RGBQUAD **pixels=NULL) tx_nodiscard |
Создает дополнительный холст (контекст рисования, Device Context, DC) в памяти. | |
HDC | txCreateDIBSection (double sizeX, double sizeY, RGBQUAD **pixels=NULL) tx_nodiscard |
Создает аппаратно-независимый дополнительный холст (контекст рисования, Device Context, DC) в памяти с возможностью прямого доступа к нему как к массиву. | |
HDC | txLoadImage (const char filename[], int sizeX=0, int sizeY=0, unsigned imageFlags=IMAGE_BITMAP, unsigned loadFlags=LR_LOADFROMFILE) tx_nodiscard |
Загружает из файла изображение в формате BMP. Делает это довольно медленно. | |
bool | txDeleteDC (HDC dc) |
Уничтожает холст (контекст рисования, DC) в памяти. | |
bool | txBitBlt (HDC destImage, double xDest, double yDest, double width, double height, HDC sourceImage, double xSource=0, double ySource=0, unsigned operation=SRCCOPY) |
Копирует изображение с одного холста (контекста рисования, DC) на другой. | |
bool | txBitBlt (double xDest, double yDest, HDC sourceImage, double xSource=0, double ySource=0) |
Копирует изображение на экран. | |
bool | txTransparentBlt (HDC destImage, double xDest, double yDest, double width, double height, HDC sourceImage, double xSource=0, double ySource=0, COLORREF transColor=TX_BLACK) |
Копирует изображение с одного холста (контекста рисования, DC) на другой с учетом прозрачности. | |
bool | txTransparentBlt (double xDest, double yDest, HDC sourceImage, COLORREF transColor=TX_BLACK, double xSource=0, double ySource=0) |
Копирует изображение на экран с учетом прозрачности. | |
bool | txAlphaBlend (HDC destImage, double xDest, double yDest, double width, double height, HDC sourceImage, double xSource=0, double ySource=0, double alpha=1.0) |
Копирует изображение с одного холста (контекста рисования, DC) на другой с учетом полупрозрачности. | |
bool | txAlphaBlend (double xDest, double yDest, HDC sourceImage, double xSource=0, double ySource=0, double alpha=1.0) |
Копирует изображение на экран с учетом полупрозрачности. | |
HDC | txUseAlpha (HDC image) |
Пересчитывает цвета пикселей с учетом прозрачности (переводит цвета в формат Premultiplied Alpha). | |
bool | txSaveImage (const char filename[], HDC dc=txDC()) |
Сохраняет в файл изображение в формате BMP. | |
Вспомогательные функции | |
double | txSleep (double time=0) |
Задерживает выполнение программы на определенное время. | |
int | txBegin () |
Блокирует обновление изображения окна, во избежание мигания. | |
int | txEnd () |
Разблокирует обновление окна, заблокированное функцией txBegin(). | |
void | txRedrawWindow () |
Обновляет изображение в окне TXLib вручную. | |
bool | txDestroyWindow (HWND wnd=txWindow()) |
Уничтожает окно. | |
double | txQueryPerformance () tx_nodiscard |
Оценивает скорость работы компьютера. | |
double | txGetFPS (int minFrames=txFramesToAverage) tx_nodiscard |
Выдает количество кадров (вызовов этой функции) в секунду. | |
int | txUpdateWindow (int update=true) |
Разрешает или запрещает автоматическое обновление изображения в окне. | |
bool | txSelectObject (HGDIOBJ obj, HDC dc=txDC()) |
Устанавливает текущий активный объект GDI. | |
bool | txIDontWantToHaveAPauseAfterMyProgramBeforeTheWindowWillClose_AndIWillNotBeAskingWhereIsMyPicture () |
Делает нечто иногда удобное. См. название функции. | |
Функции консоли | |
unsigned | txSetConsoleAttr (unsigned colors=0x07) |
Устанавливает цветовые атрибуты консоли. | |
unsigned | txGetConsoleAttr () tx_nodiscard |
Возвращает текущие цветовые атрибуты консоли. | |
bool | txClearConsole () |
Стирает текст консоли. | |
POINT | txSetConsoleCursorPos (double x, double y) |
Устанавливает позицию мигающего курсора консоли. | |
POINT | txGetConsoleCursorPos () |
Возвращает позицию мигающего курсора консоли. | |
POINT | txGetConsoleExtent () |
Возвращает размер консоли. | |
POINT | txGetConsoleFontSize () tx_nodiscard |
Возвращает размеры шрифта консоли. | |
bool | txTextCursor (bool blink=true) |
Запрещает или разрешает рисование мигающего курсора в окне. |
enum txColors |
Названия предопределенных цветов.
См. TX_BLACK, TX_BLUE и другие цвета в списке выше.
Если кому-то эти цвета не нравятся (что неудивительно), всегда можно сделать свои с помощью RGB(). См. пример ниже.
#include "TXLib.h" const COLORREF MY_DEEP_ROMANTIC_BLUE = RGB ( 0, 0, 129), MY_SHINING_MOONLIGHT = RGB (128, 255, 64); ... txSetColor (TX_YELLOW); // Устанавливаем желтый цвет линий txSetFillColor (TX_NULL); // Заливка фигур будет прозрачная txSetFillColor (MY_DEEP_ROMANTIC_BLUE); // А.И. Куинджи, "Лунная ночь на Днепре" txSetColor (MY_SHINING_MOONLIGHT); // http://tanais.info/art/pic/kuindzhi1.html
TX_BLACK |
Черный цвет. |
TX_BLUE |
Темно-синий цвет. Плохо виден. |
TX_GREEN |
Зеленый цвет. |
TX_CYAN |
Бирюзовый цвет. |
TX_RED |
Темно-красный цвет. Слишком темный. |
TX_MAGENTA |
Темно-малиновый цвет. |
TX_BROWN |
Коричневый цвет. Некрасивый. Do it yourself with RGB(). |
TX_ORANGE |
Оранжевый цвет. |
TX_GRAY |
Серый цвет. |
TX_DARKGRAY |
Темно-серый цвет. |
TX_LIGHTGRAY |
Светло-серый цвет. |
TX_LIGHTBLUE |
Светло-синий цвет. |
TX_LIGHTGREEN |
Светло-зеленый цвет. |
TX_LIGHTCYAN |
Светло-бирюзовый цвет. |
TX_LIGHTRED |
Светло-красный цвет. Не самого лучшего оттенка. |
TX_LIGHTMAGENTA |
Светло-малиновый цвет. Еще менее лучшего оттенка. |
TX_PINK |
Розовый гламурный :) |
TX_YELLOW |
Желтый цвет. |
TX_WHITE |
Белый цвет. |
TX_TRANSPARENT |
Прозрачный цвет. Отключает рисование. //-V112. |
TX_NULL |
Прозрачный цвет. Отключает рисование. |
TX_BLM |
Альтернативный политкорректный трендовый цвет! |
TX_white |
BLM-compatible name for this color. |
TX_HUE |
Цветовой тон цвета в модели HSL, [0; 255]. |
TX_SATURATION |
Насыщенность цвета в модели HSL, [0; 255]. |
TX_LIGHTNESS |
Светлота цвета в модели HSL, [0; 255]. |
HWND txCreateWindow | ( | double | sizeX, |
double | sizeY, | ||
bool | centered = true |
||
) |
Создание окна рисования
sizeX | Размер окна по горизонтали (в пикселях). |
sizeY | Размер окна по вертикали (в пикселях). |
centered | Центрирование окна на дисплее. Необязательно. Если не указано, то окно центрируется. |
main.cpp
и game.cpp
, и в файле main.cpp
создается графическое окно, то функции из game.cpp
не смогут рисовать в нем. (Однако game.cpp
сможет создать свое собственное окно.) graphics.cpp
, и выводить графику только через функции этого файла. Такой файл (или библиотеку) в больших проектах часто называют графическим движком. txCreateWindow ( 800, 600); // Окно 800х600, центрировано txCreateWindow (1024, 768, false); // Окно 1024х768, не центрировано
HDC& txDC | ( | ) |
Возвращает холст (дескриптор контекста рисования, HDC) окна рисования TXLib.
RGBQUAD* txVideoMemory | ( | ) |
Возвращает буфер памяти, связанный с холстом (HDC) TXLib.
Прямой доступ к буферу памяти HDC позволяет работать с ним с очень высокой скоростью. Правда, рисовать можно только отдельные пиксели. Это полезно, в основном, если вы пишете собственный графический рендер (так напишите же его!).
Буфер памяти HDC -- двумерный массив, размеры которого соответствуют ширине и высоте холста (HDC). Но он возвращается как указатель на одномерный массив, поэтому двумерную адресацию к нему надо вести вручную.
x + (-y + sizeY) * sizeX
, где sizeX
и sizeY
-- размеры окна TXLib. Иначе изображение будет перевернуто вверх ногами.Пример см. в файле PhongDemo.cpp из папки TX\Examples\Demo. Также см. пример в помощи по функции txCreateDIBSection().
bool txSetDefaults | ( | HDC | dc = txDC() | ) |
Установка параметров рисования по умолчанию.
dc | Дескриптор контекста рисования (холста) для установки параметров. Необязателен. |
bool txOK | ( | ) |
Проверка правильности работы библиотеки
"Библиотека не в порядке" означает, что ее внутренние данные неверны. Самая простая причина - не открыто окно, однако могут быть и другие проблемы.
txCreateWindow (800, 600); if (!txOK()) { txMessageBox ("Не смогла создать окно", "Извините", MB_ICONSTOP); return; }
POINT txGetExtent | ( | HDC | dc = txDC() | ) |
Возвращает размер окна, картинки или холста в виде структуры POINT.
dc | Дескриптор контекста рисования (холста) с загруженной или созданной картинкой, размеры которого нужно определить. Необязателен. Если не указан или равен txDC(), возвращаются размеры окна TXLib. |
x
и y
.txCreateWindow (800, 600); HDC image = txLoadImage ("TX/Wizard/TX Application/VS/HTML/1033/TX Application_resize.bmp"); POINT center = { txGetExtentX() / 2, txGetExtentY() / 2 }; POINT size = txGetExtent (image); txBitBlt (center.x, center.y, image); // This is krivo txBitBlt (center.x - size.x/2, center.y - size.y/2, image); // This is centered txSetColor (TX_WHITE, 3); txSetFillColor (TX_TRANSPARENT); txCircle (center.x, center.y, hypot (size.x, size.y) / 2); txCircle (center.x, center.y, 10); txDeleteDC (image);
int txGetExtentX | ( | HDC | dc = txDC() | ) |
Возвращает ширину окна или холста.
dc | Дескриптор контекста рисования (холста), ширина которого возвращается. Необязателен. Если не указан или равен txDC(), возвращаются ширина окна TXLib. |
txSetTextAlign (TA_CENTER); txTextOut (txGetExtentX() / 2, 100, "Oh, oh, you're in the [army]middle now");
int txGetExtentY | ( | HDC | dc = txDC() | ) |
Возвращает высоту окна или холста.
dc | Дескриптор контекста рисования (холста), высота которого возвращается. Необязателен. Если не указан или равен txDC(), возвращается высота окна TXLib. |
void DrawHouse (int height); ... DrawHouse (txGetExtentY() / 2);
HWND txWindow | ( | ) |
Возвращает дескриптор окна рисования
SetWindowText (txWindow(), "Новые заголовки -- теперь и в ваших окнах!"); txMessageBox ("Распишитесь", "Получите", MB_ICONINFORMATION);
COLORREF RGB | ( | int | red, |
int | green, | ||
int | blue | ||
) |
Создает (смешивает) цвет из трех базовых цветов (компонент).
red | Количество красного цвета в интервале [0; 255]. |
green | Количество зеленого цвета в интервале [0; 255]. |
blue | Количество синего цвета в интервале [0; 255]. |
txSetColor (RGB (255, 128, 0)); // Красный + половина зеленого = оранжевый int red = 20, green = 200, blue = 20; COLORREF color = RGB (red, green, blue); txSetFillColor (color); const COLORREF SKY_COLOR = RGB (0, 128, 255); // Создаем константу для нового цвета ... txSetFillColor (SKY_COLOR); // Используем ее
HPEN txSetColor | ( | COLORREF | color, |
double | thickness = 1 , |
||
HDC | dc = txDC() |
||
) |
Устанавливает текущий цвет и толщину линий, цвет текста.
color | Цвет линий и текста, см. txColors, RGB(). |
thickness | Толщина линий. Необязательна. Если не указана, то 1 пиксель. |
dc | Дескриптор контекста рисования (холста) для установки цвета. Необязателен. |
txSetColor (TX_YELLOW); // Цвет линий будет желтым txSetColor (RGB (255, 128, 0), 5); // Оранжевые линии толщиной 5 пикселей txSetColor (RGB (255, 255, 0)); // Желтый = Красный + зеленый (другой способ указания цвета) txSetColor (RGB (255, 128, 64)); // Нечто оранжевое
COLORREF txGetColor | ( | HDC | dc = txDC() | ) |
Возвращает текущий цвет линий и текста.
dc | Дескриптор контекста рисования (холста) для возврата цвета. Необязателен. |
COLORREF color = txGetColor();
HBRUSH txSetFillColor | ( | COLORREF | color, |
HDC | dc = txDC() |
||
) |
Устанавливает текущий цвет заполнения фигур.
color | Цвет заполнения, см. txColors, RGB(). |
dc | Дескриптор контекста рисования (холста) для установки цвета. Необязателен. |
txSetFillColor (TX_LIGHTGREEN); txSetFillColor (RGB (255, 128, 0));
COLORREF txGetFillColor | ( | HDC | dc = txDC() | ) |
Возвращает текущий цвет заполнения фигур.
dc | Дескриптор контекста рисования (холста) для возврата цвета. Необязателен. |
COLORREF color = txGetFillColor();
unsigned txExtractColor | ( | COLORREF | color, |
COLORREF | component | ||
) |
Извлекает цветовую компоненту (цветовой канал) из смешанного цвета.
color | Смешанный цвет. |
component | Извлекаемая компонента, см. txColors. |
int red = txExtractColor (color, TX_RED); int lightness = txExtractColor (TX_BLUE, TX_LIGHTNESS); // В интервале от 0 до 255 Другие примеры см. в функциях AppearText(), AppearEarth() Примера 5 ("Циклы").
COLORREF txRGB2HSL | ( | COLORREF | rgbColor | ) |
Преобразует цвет из формата RGB в формат HSL.
rgbColor | Преобразуемый цвет в формате ЕГЭ RGB. |
Формат RGB определяется как
Формат HSL определяется как
COLORREF txHSL2RGB | ( | COLORREF | hslColor | ) |
Преобразует цвет из формата HSL в формат RGB.
hslColor | Преобразуемый цвет в формате HSL. |
Формат RGB определяется как
Формат HSL определяется как
int hue = 10, saturation = 128, lightness = 128; COLORREF hslColor = RGB (hue, saturation, lightness); txSetColor (txHSL2RGB (hslColor));
bool txClear | ( | HDC | dc = txDC() | ) |
Стирает холст текущим цветом заполнения.
dc | Дескриптор контекста рисования (холста) для стирания. Необязателен. |
txSetFillColor (TX_BLUE); // Кто-то хотел синий фон? txClear();
bool txSetPixel | ( | double | x, |
double | y, | ||
COLORREF | color, | ||
HDC | dc = txDC() |
||
) |
Рисует пиксель (точку на экране).
x | X-координата точки. |
y | Y-координата точки. |
color | Цвет точки, см. txColors, RGB(). |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
txSetPixel (100, 100, TX_LIGHTRED); // Красная точка! http://www.google.ru/search?q=коты+и+красная+точка txSetPixel (100, 100, RGB (255, 128, 0));
COLORREF txGetPixel | ( | double | x, |
double | y, | ||
HDC | dc = txDC() |
||
) |
Возвращает текущий цвет точки (пикселя) на экране.
x | X-координата точки. |
y | Y-координата точки. |
dc | Дескриптор контекста рисования (холста) для возврата цвета. Необязателен. |
COLORREF color = txGetPixel (100, 200); if (txGetPixel (x, y) == TX_RED) CarCrash (x, y); // Mess with the red -- die like the rest
bool txLine | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
HDC | dc = txDC() |
||
) |
Рисует линию.
x0 | X-координата начальной точки. |
y0 | Y-координата начальной точки. |
x1 | X-координата конечной точки. |
y1 | Y-координата конечной точки. |
dc | Дескриптор контекста рисования (холста) для рисования линии. Необязателен. |
Цвет и толщина линии задается функцией txSetColor().
txLine (10, 50, 100, 500); // Правда бедный примерчик, да?
bool txRectangle | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
HDC | dc = txDC() |
||
) |
Рисует прямоугольник.
x0 | X-координата верхнего левого угла. |
y0 | Y-координата верхнего левого угла. |
x1 | X-координата нижнего правого угла. |
y1 | Y-координата нижнего правого угла. |
dc | Дескриптор контекста рисования (холста) для рисования прямоугольника. Необязателен. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor().
txRectangle (100, 200, 400, 500); Win32::RoundRect (txDC(), 100, 200, 400, 500, 30, 30); // И такое есть. Погуглите "RoundRect function".
bool txPolygon | ( | const POINT | points[], |
int | numPoints, | ||
HDC | dc = txDC() |
||
) |
Рисует ломаную линию или многоугольник.
points | Массив структур POINT с координатами точек. |
numPoints | Количество точек в массиве. |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor(). Если нужно нарисовать ломаную линию, а не многоугольник, используйте прозрачный цвет заполнения (TX_TRANSPARENT).
POINT star[5] = {{150, 300}, {200, 100}, {250, 300}, {100, 200}, {300, 200}}; txPolygon (star, 5); // Я кривая звездочка
bool txEllipse | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
HDC | dc = txDC() |
||
) |
Рисует эллипс.
x0 | X-координата верхнего левого угла прямоугольника, описанного вокруг эллипса. |
y0 | Y-координата верхнего левого угла описанного прямоугольника. |
x1 | X-координата нижнего правого угла описанного прямоугольника. |
y1 | Y-координата нижнего правого угла описанного прямоугольника. |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor().
txEllipse (100, 100, 300, 200);
bool txCircle | ( | double | x, |
double | y, | ||
double | r | ||
) |
Рисует окружность или круг.
x | X-координата центра. |
y | Y-координата центра. |
r | Радиус. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor().
txCircle (100, 100, 10);
bool txArc | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
double | startAngle, | ||
double | totalAngle, | ||
HDC | dc = txDC() |
||
) |
Рисует дугу эллипса.
x0 | X-координата верхнего левого угла прямоугольника, описанного вокруг эллипса, содержащего дугу (см. txEllipse). |
y0 | Y-координата верхнего левого угла прямоугольника. |
x1 | X-координата нижнего правого угла прямоугольника. |
y1 | Y-координата нижнего правого угла прямоугольника. |
startAngle | Угол между направлением оси OX и началом дуги (в градусах). |
totalAngle | Величина дуги (в градусах). |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor().
txArc (100, 100, 300, 200, 45, 270);
bool txPie | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
double | startAngle, | ||
double | totalAngle, | ||
HDC | dc = txDC() |
||
) |
Рисует сектор эллипса.
x0 | X-координата верхнего левого угла прямоугольника, описанного вокруг эллипса, содержащего дугу (см. txEllipse). |
y0 | Y-координата верхнего левого угла прямоугольника. |
x1 | X-координата нижнего правого угла прямоугольника. |
y1 | Y-координата нижнего правого угла прямоугольника. |
startAngle | Угол между направлением оси OX и началом сектора (в градусах). |
totalAngle | Величина сектора (в градусах). |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor().
txPie (100, 100, 300, 200, 0, 180); // Enter Pacman
bool txChord | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
double | startAngle, | ||
double | totalAngle, | ||
HDC | dc = txDC() |
||
) |
Рисует хорду эллипса.
x0 | X-координата верхнего левого угла прямоугольника, описанного вокруг эллипса, содержащего дугу (см. txEllipse). |
y0 | Y-координата верхнего левого угла прямоугольника. |
x1 | X-координата нижнего правого угла прямоугольника. |
y1 | Y-координата нижнего правого угла прямоугольника. |
startAngle | Угол между направлением оси OX и началом хорды (в градусах). |
totalAngle | Величина хорды (в градусах). |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет и толщина линий задается функцией txSetColor(), цвет заполнения -- txSetFillColor().
txChord (100, 100, 300, 200, 45, 270);
bool txFloodFill | ( | double | x, |
double | y, | ||
COLORREF | color = TX_TRANSPARENT , |
||
DWORD | mode = FLOODFILLSURFACE , |
||
HDC | dc = txDC() |
||
) |
Заливает произвольный контур текущим цветом заполнения.
x | X-координата точки начала заливки. |
y | Y-координата точки начала заливки. |
color | Цвет заливаемой области. Необязателен. Если не указан, то используется TX_TRANSPARENT -- автоопределение цвета. |
mode | Режим заливки. Необязателен. Если не указан, то используется FLOODFILLSURFACE -- заливка однородного фона. |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет заполнения задается функцией txSetFillColor(). Не рекомендуется для применения, так как работает довольно медленно. Лучше Используйте txPolygon().
FLOODFILLSURFACE | -- Заливать область, указанную цветом color. |
FLOODFILLBORDER | -- Заливать до границы, указанной цветом color. |
txSetFillColor (TX_PINK); txLine (100, 200, 150, 100); txLine (150, 100, 200, 200); txLine (200, 200, 100, 200); txFloodFill (150, 150);
bool txTriangle | ( | double | x1, |
double | y1, | ||
double | x2, | ||
double | y2, | ||
double | x3, | ||
double | y3 | ||
) |
Функция, которая должна бы рисовать треугольник.
x1 | X-координата 1-й точки. |
y1 | Y-координата 1-й точки. |
x2 | X-координата 2-й точки. |
y2 | Y-координата 2-й точки. |
x3 | X-координата 3-й точки. |
y3 | Y-координата 3-й точки. |
void txDrawMan | ( | int | x, |
int | y, | ||
int | sizeX, | ||
int | sizeY, | ||
COLORREF | color, | ||
double | handL, | ||
double | handR, | ||
double | twist, | ||
double | head, | ||
double | eyes, | ||
double | wink, | ||
double | crazy, | ||
double | smile, | ||
double | hair, | ||
double | wind | ||
) |
Рисует человечка.
Это пример функции, которую Вы могли бы написать и сами.
x | X-координата человечка. |
y | Y-координата человечка. |
sizeX | Ширина человечка. |
sizeY | Высота человечка (также определяет размер головы). |
color | Цвет человечка. |
handL | Высота подъема левой руки (относительно высоты человечка). |
handR | Высота подъема правой руки (относительно высоты человечка). |
twist | Смещение спины (относительно ширины человечка). |
head | Высота подъема головы (относительно высоты человечка). |
eyes | Величина глаз (относительно размера головы). |
wink | Моргание глаз (0 -- оба открыты, -1 -- закрыт левый, +1 -- закрыт правый). |
crazy | Смещение глаз по вертикали (относительно размера головы). |
smile | Улыбка (относительно размера головы). |
hair | Длина волос (относительно размера головы). |
wind | Ветер, развевающий волосы (относительно размера головы). |
txCreateWindow (800, 600); //-----------+---+----+-----+-----+----------+-----+-----+-----+----+----+----+-----+-----+----+----- // | x | y |sizeX|sizeY| color |handL|handR|twist|head|eyes|wink|crazy|smile|hair|wind //-----------+---+----+-----+-----+----------+-----+-----+-----+----+----+----+-----+-----+----+----- // | | | | | | | | | | | | | | | txDrawMan (125, 250, 200, 200, TX_WHITE, 0, 0, 0, 0, 0.8, 0, 0, 1.0, 0, 0); txDrawMan (325, 250, 100, 200, TX_YELLOW, 0, 0, 0, 0, 0.8, 0, 0, -1.0, 2, 0); txDrawMan (525, 250, 200, 100, TX_ORANGE, 0, 0, 0, 0, 1.0, 0, -1, 0.3, 1, 0); txDrawMan (725, 250, 100, 100, TX_LIGHTRED, 0, 0, 0, 0, 1.0, 0, 1, -0.3, 3, 0); txDrawMan (125, 550, 200, 200, TX_WHITE, 0.3, 0.3, 0, 0, 0.8, -1, 1, 0.5, 2, -1); txDrawMan (325, 550, 100, 200, TX_YELLOW, -0.5, -0.5, 0, 0.1, 0.8, 1, 0, -0.5, 3, 5); txDrawMan (525, 550, 200, 100, TX_ORANGE, -0.5, 0.3, 0.2, 0, 0.8, -1, 1, 0.0, 10, -5); txDrawMan (725, 550, 100, 100, TX_LIGHTRED, 0.3, -0.5, -0.4, 0, 0.8, 1, -1, 0.0, 1, 1);
bool txTextOut | ( | double | x, |
double | y, | ||
const char | text[], | ||
HDC | dc = txDC() |
||
) |
Рисует текст.
x | X-координата начальной точки текста. |
y | Y-координата начальной точки текста. |
text | Текстовая строка. |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет текста задается функцией txSetColor(), выравнивание (влево/вправо/по центру) -- txSetTextAlign().
txTextOut (100, 100, "Здесь могла бы быть Ваша реклама.");
bool txDrawText | ( | double | x0, |
double | y0, | ||
double | x1, | ||
double | y1, | ||
const char | text[], | ||
unsigned | format = DT_CENTER|DT_VCENTER|DT_WORDBREAK|DT_WORD_ELLIPSIS , |
||
HDC | dc = txDC() |
||
) |
Рисует текст, размещенный в прямоугольной области.
x0 | X-координата верхнего левого угла области. |
y0 | Y-координата верхнего левого угла области. |
x1 | X-координата нижнего правого угла области. |
y1 | Y-координата нижнего правого угла области. |
text | Текстовая строка. |
format | Флаги форматирования текста. Необязательны. Если не указаны, то используется: центрирование, перенос по словам и добавление многоточия, если надпись не умещается в область. |
dc | Дескриптор контекста рисования (холста) для рисования. Необязателен. |
Цвет текста задается функцией txSetColor(), выравнивание (влево/вправо/по центру) -- txSetTextAlign().
Флаги форматирования текста см. в MSDN (http://msdn.com), искать "DrawText Function (Windows)": http://msdn.microsoft.com/en-us/library/dd162498%28VS.85%29.aspx.
Автоматический перенос текста на несколько строк включается, если текст состоит из нескольких строк (есть хотя бы один символ новой строки \n
).
Если надо отформатировать текст не по центру, а по левому или правому краю, то не забудьте указать остальные флаги форматирования, если они нужны: DT_VCENTER
(вертикальное центрирование) |
DT_WORDBREAK
(перенос по словам) |
DT_WORD_ELLIPSIS
(ставить многоточие в конце, если текст не умещается). См. значение флагов по умолчанию.
\n
.txCreateWindow (800, 600); txSetColor (TX_BLACK); txSetFillColor (TX_DARKGRAY); Win32::RoundRect (txDC(), 105, 205, 705, 405, 30, 30); txSetFillColor (TX_WHITE); Win32::RoundRect (txDC(), 100, 200, 700, 400, 30, 30); txSelectFont ("Arial", 20, 0, FW_BOLD); txDrawText (100, 250, 700, 350, "Котики говорят: Мяу!,\n" "Собачки говорят: Гав!,\n\n" "Программисты говорят: Ты КОММИТ НА ГИТХАБ СДЕЛАЛ?!?!!");
HFONT txSelectFont | ( | const char | name[], |
double | sizeY, | ||
double | sizeX = -1 , |
||
int | bold = FW_DONTCARE , |
||
bool | italic = false , |
||
bool | underline = false , |
||
bool | strikeout = false , |
||
double | angle = 0 , |
||
HDC | dc = txDC() |
||
) |
Выбирает текущий шрифт, его размер и другие атрибуты.
name | Название шрифта. |
sizeY | Высота букв (размер по Y ). |
sizeX | Ширина букв. Необязательна. Если не указана, то берется 1/3 от высоты. |
bold | Жирность шрифта (от 0 до 1000). Необязательна. Если не указана, то берется обычный шрифт. |
italic | Курсив. Необязателен. |
underline | Подчеркивание. Необязательно. |
strikeout | Перечеркивание. Необязательно. |
angle | Угол поворота текста (в градусах). Необязателен. |
dc | Дескриптор контекста рисования (холста) для выбора шрифта. Необязателен. |
(SYSTEM_FIXED_FONT, см. MSDN). Существование шрифта можно проверить функцией txFontExist().txSelectFont ("Comic Sans MS", 40); txTextOut (100, 100, "И здесь могла бы быть Ваша реклама."); txSelectFont ("Comic Sans MS", 40, 10, FW_BOLD, true, false, true, 15); txTextOut (100, 200, "Но ее почему-то нет.");
SIZE txGetTextExtent | ( | const char | text[], |
HDC | dc = txDC() |
||
) |
Вычисляет размеры текстовой надписи.
text | Текстовая строка. |
dc | Дескриптор контекста рисования (холста), где планируется разместить надпись. Необязателен. |
SIZE size = txGetTextExtent (text); txTextOut (100 + size.cx / 2, 200 + size.cy / 2, text);
int txGetTextExtentX | ( | const char | text[], |
HDC | dc = txDC() |
||
) |
Вычисляет ширину текстовой надписи.
text | Текстовая строка. |
dc | Дескриптор контекста рисования (холста), где планируется разместить надпись. Необязателен. |
txTextOut (100 + txGetTextExtentX (text) / 2, 200 + txGetTextExtentY (text) / 2, text);
int txGetTextExtentY | ( | const char | text[], |
HDC | dc = txDC() |
||
) |
Вычисляет высоту текстовой надписи.
text | Текстовая строка. |
dc | Дескриптор контекста рисования (холста), где планируется разместить надпись. Необязателен. |
txTextOut (100 + txGetTextExtentX (text) / 2, 200 + txGetTextExtentY (text) / 2, text);
unsigned txSetTextAlign | ( | unsigned | align = TA_CENTER|TA_BASELINE , |
HDC | dc = txDC() |
||
) |
Устанавливает текущее выравнивание текста (влево/вправо/по центру).
align | Флаги выравнивания. Необязательны. Если не указаны, то используются центрирование по горизонтали. |
dc | Дескриптор контекста рисования (холста), где планируется разместить надпись. Необязателен. |
TA_LEFT | Текст выравнивается влево. Точка (X,Y) определяет левую границу текста. |
TA_RIGHT | Текст выравнивается вправо. Точка (X,Y) определяет правую границу текста. |
TA_CENTER | Текст центрируется по горизонтали относительно точки @ (X,Y). |
TA_BASELINE | Точка (X,Y) определяет базовую линию текста. |
TA_BOTTOM | Точка (X,Y) определяет нижнюю границу текста. |
TA_TOP | Точка (X,Y) определяет верхнюю границу текста. |
txSetTextAlign (TA_RIGHT); txTextOut (700, 100, "Чтобы доступ был легок и быстр,"); txTextOut (700, 150, "Переменную клади в регистр."); txSetTextAlign();
LOGFONT* txFontExist | ( | const char | name[] | ) |
Ищет шрифт по его названию.
name | Название шрифта. |
if (txFontExist ("Comic Sans MS")) txSelectFont ("Comic Sans MS", 30); else txSelectFont ("Times New Roman", 30); txTextOut (100, 100, "Комик ли Санс?"); // google.ru/search?q=philosoraptor
HDC txCreateCompatibleDC | ( | double | sizeX, |
double | sizeY, | ||
HBITMAP | bitmap = NULL , |
||
RGBQUAD ** | pixels = NULL |
||
) |
Создает дополнительный холст (контекст рисования, Device Context, DC) в памяти.
sizeX | Ширина холста. |
sizeY | Высота холста. |
bitmap | Bitmap to be associated with DC (optional). If omitted, color bitmap will be created automatically via Win32::CreateDIBSection. |
pixels | This parameter is optional and may be omitted. When bitmap == NULL, a DIBSection will be created (see above) and this parameter will be associated with its pixels colors array pointer. See txCreateDIBSection() function below. Also, txCreateDIBSection() is preferred when using per-pixel transparency. See txVideoMemory() for important notes. |
После создания на этом холсте можно рисовать, как и на основном окне TXLib, используя параметр dc
функций рисования. Созданный холст имеет свои собственные настройки цветов, шрифтов и т.д., отличные от настроек основного окна TXLib. Чтобы увидеть результат рисования, скопируйте изображение холста на экран с помощью функций txBitBlt(), txTransparentBlt() или txAlphaBlend().
bitmap
, будьте внимательны.HDC save = txCreateCompatibleDC (100, 100); txBitBlt (save, 0, 0, 100, 100, txDC(), 0, 0); // Сохраняем фон txTextOut (20, 20, "Boo!"); txSleep (2000); txBitBlt (txDC(), 0, 0, 100, 100, save, 0, 0); // Текст исчезает txDeleteDC (save);
HDC txCreateDIBSection | ( | double | sizeX, |
double | sizeY, | ||
RGBQUAD ** | pixels = NULL |
||
) |
Создает аппаратно-независимый дополнительный холст (контекст рисования, Device Context, DC) в памяти с возможностью прямого доступа к нему как к массиву.
sizeX | Ширина холста. |
sizeY | Высота холста. |
pixels | Указатель на переменную, которая будет использоваться для доступа к пикселям изображения. Необязателен. Эта переменная должна быть указателем на массив структур RGBQUAD, каждая из которых описывает цвет одного пикселя. Не надо создавать самому этот массив! Его создаст txCreateDIBSection() и вернет через этот указательный параметр. Объявите только указатель и занулите его, потом его адрес передайте в функцию. |
После создания на этом холсте можно рисовать, как и на основном окне TXLib, используя параметр dc
функций рисования. Созданный холст имеет свои собственные настройки цветов, шрифтов и т.д., отличные от настроек основного окна TXLib. Чтобы увидеть результат рисования, скопируйте изображение холста на экран с помощью функций txBitBlt(), txTransparentBlt() или txAlphaBlend().
Самое важное, что аппаратно-независимые холсты, создаваемые этой функцией, позволяют напрямую и быстро изменять цвета пикселей изображения, а также его прозрачность в каждой точке. См. пример использования.
Для прямого доступа к пикселям холста, как к массиву, надо объявить указатель на массив структур RGBQUAD и передать адрес этого указателя в качестве третьего параметра функции txCreateDIBSection(). Она изменит значение этого указателя так, что он станет указывать на массив цветов пикселей холста.
Массив pixels
одномерный, но по сути он описывает двумерное изображение. Поэтому с ним надо работать как с двумерным прямоугольным массивом, физически расположенным в одномерном массиве: вручную вычислять смещение от начала массива до нужного пикселя и после этого адресоваться к массиву. (Так обычно делают, размещая двумерные массивы в динамической памяти.) См. пример использования.
x + (-y + sizeY) * sizeX
, где sizeX
и sizeY
-- размеры изображения. Иначе изображение будет перевернуто вверх ногами.int main() { txCreateWindow (800, 600); POINT size = txGetExtent(); txSetFillColor (TX_BLACK); txTextCursor (false); txBegin(); HDC src = GetDC (HWND_DESKTOP); // Get HDC from Windows Desktop RGBQUAD* buf = NULL; // Do NOT actually create the array! HDC dc = txCreateDIBSection (size.x, size.y, &buf); assert (dc); assert (buf); // Here, 'buf' points to an array created // by txCreateDIBSection() while (!GetAsyncKeyState (VK_ESCAPE)) { txBitBlt (dc, 0, 0, size.x, size.y, src); for (int y = 0; y < size.y; y++) for (int x = 0; x < size.x; x++) { RGBQUAD* color = & buf [x + y * size.x]; // Get color at (x, y) within image buffer double r = hypot (x - size.x/2, y - size.y/2); double alpha = sin (0.05 * r) * 0.25 + 0.5; color->rgbReserved = (BYTE) ROUND (255 * alpha); // Set alpha-channel (transparency) } txUseAlpha (dc) asserted; // Premultiply colors with alpha txClear(); txAlphaBlend (txDC(), 0, 0, 0, 0, dc); printf ("FPS %.0lf\t\t\r", txGetFPS()); txSleep (0); } txSaveImage ("TxFilter.bmp", dc); txDeleteDC (dc); ReleaseDC (HWND_DESKTOP, src); // Free Windows Desktop HDC return 0; }
HDC txLoadImage | ( | const char | filename[], |
int | sizeX = 0 , |
||
int | sizeY = 0 , |
||
unsigned | imageFlags = IMAGE_BITMAP , |
||
unsigned | loadFlags = LR_LOADFROMFILE |
||
) |
Загружает из файла изображение в формате BMP. Делает это довольно медленно.
filename | Имя файла с изображением в формате BMP. |
sizeX | Размер загружаемого изображения. Необязателен. Если не указан, используется оригинальный размер рисунка из файла. |
sizeY | Размер загружаемого изображения. Необязателен. Если не указан, используется оригинальный размер рисунка из файла. |
imageFlags | Тип загружаемого изображения, см. ниже. Необязателен. Если не указаны, загружается рисунок в формате BMP. |
loadFlags | Флаги загрузки изображения, см. ниже. Необязательны. Если не указаны, загрузка идет из файла. |
Если функция вернула NULL, то надо прежде всего проверить наличие файла изображения по указанному в программе пути и формат файла. Если путь к файлу не указан (или указан как неполный), то путь отсчитывается от текущей папки программы, которая может не совпадать текущей папкой среды программирования. Текущую папку программы можно посмотреть по команде About в системном меню (она указана там как "Run from").
Если изображение в файле содержит альфа-канал (информацию о прозрачности), то его цвета должны находиться в формате Premultiplied Alpha. См. замечания к функции txAlphaBlend().
Если изображение в файле с альфа-каналом не находится в формате Premultiplied Alpha, то после вызова txLoadImage() нужно вызвать функцию txUseAlpha(). Однако не надо этого делать, если цвета в файле уже находятся в формате Premultiplied Alpha, иначе картинка станет темнее. Также не надо вызывать txUseAlpha() несколько раз для одного и того же изображения.
IMAGE_BITMAP | Рисунок в формате BMP |
IMAGE_CURSOR | Курсор в формате CUR или ANI |
IMAGE_ICON | Иконка в формате ICO |
LR_CREATEDIBSECTION | Создает DIB (device-independent bitmap), удобную для прямого доступа к данным |
LR_LOADFROMFILE | Загружает из файла (если этот флаг не указан, то загружает из ресурса EXE-файла) |
Остальные флаги загрузки | см. на MSDN.com, поиск "LoadImage function". |
HDC background_CopiedFromHelp = txLoadImage ("Resources\\Images\\Background.bmp"); if (!background_CopiedFromHelp) txMessageBox ("Не могу загрузить фон из Background.bmp", "Да, я скопировал это из примера"); // Не надо часто загружать одно и то же изображение, особенно в цикле -- программа будет тормозить! // Загрузите один раз перед циклом, потом используйте много раз. // Посмотрите, как сделано в примере TX\Examples\Tennis\Tennis.cpp. txBitBlt (txDC(), 0, 0, 800, 600, background_CopiedFromHelp, 0, 0); ... txDeleteDC (background_CopiedFromHelp);
bool txDeleteDC | ( | HDC | dc | ) |
Уничтожает холст (контекст рисования, DC) в памяти.
dc | Контекст рисования для уничтожения. Если передан указатель на контекст, то после уничтожения по указателю записывается NULL. |
HDC background_CopiedFromHelp = txLoadImage ("Resources\\Images\\Background.bmp"); if (!background_CopiedFromHelp) txMessageBox ("Не могу загрузить фон из Background.bmp, и я скопировал это из примера.", "Oh, not now"); // См. важный комментарий в примере к функции txLoadImage! txBitBlt (txDC(), 0, 0, 800, 600, background_CopiedFromHelp, 0, 0); ... txDeleteDC (background_CopiedFromHelp);
bool txBitBlt | ( | HDC | destImage, |
double | xDest, | ||
double | yDest, | ||
double | width, | ||
double | height, | ||
HDC | sourceImage, | ||
double | xSource = 0 , |
||
double | ySource = 0 , |
||
unsigned | operation = SRCCOPY |
||
) |
Копирует изображение с одного холста (контекста рисования, DC) на другой.
destImage | Контекст назначения (куда копировать). Для копирования в окно TXLib укажите txDC(). |
xDest | X-координата верхнего левого угла копируемого изображения. |
yDest | Y-координата верхнего левого угла копируемого изображения. |
width | Ширина копируемой области. Если равна 0, то равна ширине изображения-источника. |
height | Высота копируемой области. Если равна 0, то равна высоте изображения-источника. |
sourceImage | Контекст источника (откуда копировать). |
xSource | X-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
ySource | Y-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
operation | Вид операции копирования. Список видов гуглите по запросу "BitBlt function MSDN". Необязательен. Если не указан, то SRCCOPY (обычное копирование изображения). |
HDC background_CopiedFromHelp = txLoadImage ("Resources\\Images\\Background.bmp"); if (!background_CopiedFromHelp) txMessageBox ("Не могу фон из загрузить Background.bmp, и да, я взял этот код из примера.", "Once again :("); // См. важный комментарий в примере к функции txLoadImage! txBitBlt (txDC(), 0, 0, 800, 600, background_CopiedFromHelp); ... txDeleteDC (background_CopiedFromHelp);
bool txBitBlt | ( | double | xDest, |
double | yDest, | ||
HDC | sourceImage, | ||
double | xSource = 0 , |
||
double | ySource = 0 |
||
) |
Копирует изображение на экран.
xDest | X-координата верхнего левого угла копируемого изображения. |
yDest | Y-координата верхнего левого угла копируемого изображения. |
sourceImage | Копируемое изображение. |
xSource | X-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
ySource | Y-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
См. описание в функции txBitBlt() выше.
bool txTransparentBlt | ( | HDC | destImage, |
double | xDest, | ||
double | yDest, | ||
double | width, | ||
double | height, | ||
HDC | sourceImage, | ||
double | xSource = 0 , |
||
double | ySource = 0 , |
||
COLORREF | transColor = TX_BLACK |
||
) |
Копирует изображение с одного холста (контекста рисования, DC) на другой с учетом прозрачности.
destImage | Контекст назначения (куда копировать). Для копирования в окно TXLib укажите txDC(). |
xDest | X-координата верхнего левого угла копируемого изображения. |
yDest | Y-координата верхнего левого угла копируемого изображения. |
width | Ширина копируемой области. Если равна 0, то автоматически берется из размера источника. |
height | Высота копируемой области. Если равна 0, то автоматически берется из размера источника. |
sourceImage | Контекст источника (откуда копировать). |
xSource | X-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
ySource | Y-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
transColor | Цвет, который будет считаться прозрачным. Необязателен. Если не указан, то TX_BLACK. |
Стандартная функция TransparentBlt из Win32 API может масштабировать изображение. В txTransparentBlt это убрано для упрощения использования. If you need image scaling, use original function TransparentBlt and don't mess with stupid TX-based tools. (See implementation of txTransparentBlt in TXLib.h).
Win32::TransparentBlt
из Win32 API может масштабировать изображение. В txTransparentBlt это убрано для упрощения использования. If you still need image scaling, use original function Win32::TransparentBlt and don't mess with stupid TX-based tools. (See implementation of txTransparentBlt in TX library source: open TXLib.h file in your editor and search for txTransparentBlt function definition.)HDC superman_CopiedFromHelp = txLoadImage ("Resources\\Images\\Superman.bmp"); if (!superman_CopiedFromHelp) txMessageBox ("Cannot load superman, all the monsters will succeed (I copied them from TXLib Help)", "Sorry"); // См. важный комментарий в примере к функции txLoadImage! txTransparentBlt (txDC(), 0, 0, 800, 600, superman_CopiedFromHelp); // А можно и так: Win32::TransparentBlt (txDC(), 0, 0, 800, 600, superman_CopiedFromHelp, 0, 0, 80, 60, -1); // 10x zoom // Познай мощь Win32 GDI, отказавшись от TXLib'а! :) см. TransparentBlt в MSDN.com. ... txDeleteDC (superman_CopiedFromHelp); // So pity :( But he was only a copy from TXLib Help.
bool txTransparentBlt | ( | double | xDest, |
double | yDest, | ||
HDC | sourceImage, | ||
COLORREF | transColor = TX_BLACK , |
||
double | xSource = 0 , |
||
double | ySource = 0 |
||
) |
Копирует изображение на экран с учетом прозрачности.
xDest | X-координата верхнего левого угла копируемого изображения. |
yDest | Y-координата верхнего левого угла копируемого изображения. |
sourceImage | Копируемое изображение. |
transColor | Цвет, который будет считаться прозрачным. Необязателен. Если не указан, то TX_BLACK. |
xSource | X-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
ySource | Y-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
См. описание в функции txTransparentBlt() выше.
bool txAlphaBlend | ( | HDC | destImage, |
double | xDest, | ||
double | yDest, | ||
double | width, | ||
double | height, | ||
HDC | sourceImage, | ||
double | xSource = 0 , |
||
double | ySource = 0 , |
||
double | alpha = 1.0 |
||
) |
Копирует изображение с одного холста (контекста рисования, DC) на другой с учетом полупрозрачности.
destImage | Контекст назначения (куда копировать). Для копирования в окно TXLib укажите txDC(). |
xDest | X-координата верхнего левого угла копируемого изображения. |
yDest | Y-координата верхнего левого угла копируемого изображения. |
width | Ширина копируемой области. Если равна 0, то равна ширине изображения-источника. |
height | Высота копируемой области. Если равна 0, то равна высоте изображения-источника. |
sourceImage | Контекст источника (откуда копировать). Должен иметь 32-битовый формат и альфа-канал (см. ниже). |
xSource | X-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
ySource | Y-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
alpha | Общая прозрачность изображения, в дополнение к альфа-каналу (0 -- все прозрачно, 1 -- использовать только альфа-канал). Необязательна. Если не указана, то 1. |
Пустое 32-битовое изображение-источник также может быть создано с помощью функции txCreateDIBSection(), а 24-битовое -- функцией txCreateCompatibleDC(). После создания на этом изображении можно рисовать, как на основном окне TXLib, используя параметр dc
функций рисования.
Если изображение-источник создано с помощью txCreateDIBSection() или txLoadImage(), то txAlphaBlend() может использовать как общую прозрачность, задачаемую параметром alpha
, так и попиксельную прозрачность, задаваемую альфа-каналом.
Если изображение имеет 24-битовый RGB-формат файлов (TrueColor), то это подразумевает, что попиксельной прозрачности нет и все пиксели изображения имеют равную прозрачность, задающуюся параметром alpha
.
Имейте в виду, что многие графические редакторы сохраняют изображение в 32-битовом формате, даже если вы явно указываете 24-битовый формат или формат TrueColor. Если при этом в изображении нет альфа-канала, то txAlphaBlend не выведет ничего. Так происходит, например, если сохранять картинку в Microsoft Paint, который не умеет создавать альфа-каналы и при этом сохраняет всегда в 32-битовом формате. Для таких случаев надо использовать txTransparentBlt.
Для BMP-файла альфа-канал можно сделать, например, в Adobe Photoshop, командой "Новый канал (New Channel)" в палитре каналов (Channels). Черный цвет в альфа-канале соответствует полной прозрачности, белый -- полной непрозрачности. При этом в прозрачных областях само изображение (в каналах R, G, B) должно быть черным, и чем прозрачнее, тем чернее. Такой формат цвета называется Premultiplied Alpha. См. изображение с альфа-каналом в примере TX\Examples\Tennis\Tennis.cpp (файл с теннисной ракеткой: TX\Examples\Tennis\Resources\Images\Racket.bmp).
Иначе говоря, при пересчете в формат Premultiplied Alpha надо домножить цвета в каналах R,G,B на значения альфа-канале A:
R,G,B *= A / 255.0
. Получится вот что:
В редакторе Adobe Photoshop это можно сделать командой Image -- Apply Image с параметрами:
Source: | Имя файла с картинкой |
Layer: | Background |
Channel: | Alpha 1 |
Blending: | Multiply |
Opacity: | 100% |
Если изображение с альфа-каналом не находится в формате Premultiplied Alpha и вам лень читать что, что написано выше, то для перевода в этот формат можно использовать функцию txUseAlpha(). Однако не надо вызывать txUseAlpha() несколько раз для одного и того же уже загруженного изображения, иначе оно может становиться темнее и темнее.
HDC batman_CopiedFromHelp = txLoadImage ("Resources\\Images\\Batman.bmp"); if (!batman_CopiedFromHelp) txMessageBox ("Call to Batman failed because I copied it from TXLib Help", "Do save yourself"); txUseAlpha (batman_CopiedFromHelp); // If image colors are not premultiplied, see above // См. важный комментарий в примере к функции txLoadImage! txAlphaBlend (txDC(), 0, 0, 800, 600, batman_CopiedFromHelp); ... txDeleteDC (batman_CopiedFromHelp); // Don't worry, batman will return in "Batman returns" movie, later... ... return batman_CopiedFromHelp; // ...and there he comes -- in TXLib copy form
bool txAlphaBlend | ( | double | xDest, |
double | yDest, | ||
HDC | sourceImage, | ||
double | xSource = 0 , |
||
double | ySource = 0 , |
||
double | alpha = 1.0 |
||
) |
Копирует изображение на экран с учетом полупрозрачности.
xDest | X-координата верхнего левого угла копируемого изображения. |
yDest | Y-координата верхнего левого угла копируемого изображения. |
sourceImage | Копируемое изображение. |
xSource | X-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
ySource | Y-координата верхнего левого угла копируемой области внутри изображения-источника. Необязательна. Если не указана, то 0. |
alpha | Общая прозрачность изображения, в дополнение к альфа-каналу (0 -- все прозрачно, 1 -- использовать только альфа-канал). Необязательна. Если не указана, то 1. |
См. описание в функции txAlphaBlend() выше.
HDC txUseAlpha | ( | HDC | image | ) |
Пересчитывает цвета пикселей с учетом прозрачности (переводит цвета в формат Premultiplied Alpha).
image | Дескриптор холста, изображение которого пересчитывается. |
Пересчет цветов в каналах R,G,B в формат Premultiplied Alpha с учетом значения в альфа-канале A
идет по формуле R,G,B *= A / 255.0
. Получается вот что:
Пересчет цветов пикселей с учетом их прозрачности в формат Premultiplied Alpha необходим:
См. также замечания к функции txAlphaBlend().
bool txSaveImage | ( | const char | filename[], |
HDC | dc = txDC() |
||
) |
Сохраняет в файл изображение в формате BMP.
filename | Имя файла с расширением "BMP", куда будет записано изображение в формате BMP. |
dc | Дескриптор холста, изображение которого сохраняется в файл. Необязателен. Если txDC(), сохраняется изображение окна TXLib. |
txDrawMan (50, 110, 100, 100, TX_YELLOW, 0.3, -0.5, -0.4, 0, 0.8, 1, -1, 0.5, 1, 1); HDC dc = txCreateCompatibleDC (100, 110); txBitBlt (dc, 0, 0, 100, 110, txDC()); txSaveImage ("TXLibMan.bmp", dc); txBitBlt (dc, 0, 0, 100, 110, txDC()); txBitBlt (txDC(), 200, 200, 0, 0, dc); txAlphaBlend (txDC(), 100, 100, 0, 0, dc, 0, 0, 0.25, 0); txDeleteDC (dc); txSaveImage ("ScreenShot.bmp");
double txSleep | ( | double | time = 0 | ) |
Задерживает выполнение программы на определенное время.
time | Задержка в миллисекундах. Необязательна. Если не указана, то используется минимальная возможная задержка. |
txSleep (500); // ПП: Поспать Полсекунды
int txBegin | ( | ) |
Блокирует обновление изображения окна, во избежание мигания.
Для снятия блокировки используется функция txEnd().
TXLib реализует двойную буферизацию. Все рисовательные действия происходят со скрытым HDC, находящемся в памяти, и его содержимое периодически автоматически копируется на экран. Это иногда приводит к мерцанию. Автоматическое копирование можно выключить функцией txBegin() и обратно включить функцией txEnd(), в этом случае содержимое окна можно перерисовать функциями txRedrawWindow() или txSleep().
Если в программе требуется задержка, то используйте функции txRedrawWindow() или txSleep(), так как они автоматически обновляют изображение, независимо от состояния блокировки.
txBegin(); // Здесь изображение "замерзнет" txSetFillColor (TX_WHITE); txClear(); // Это вызвало бы мигание без txBegin() txSetFillColor (TX_RED); txRectangle (100, 100, 200, 200); txEnd(); // Здесь мы сразу увидим окончательный рисунок // // Как правильно использовать блокировку обновления окна в циклах: // int x = 0, y = 0; txBegin(); // Отключаем автоматическое обновление окна while (!GetAsyncKeyState (VK_ESCAPE)) // Цикл, пока не нажата клавиша ESCAPE { txSetFillColor (TX_BLACK); txClear(); // Очищаем окно txSetFillColor (TX_DARKGRAY); // Рисуем объект. По-нормальному это надо сделать в отдельной txCircle (x, y, 50); // функции. На экране это рисование пока не будет видно, txSetFillColor (TX_LIGHTGRAY); // из-за отключенного обновления и двойной буферизации. txCircle (x, y, 30); txSetFillColor (TX_WHITE); txCircle (x, y, 10); x += 5; // Изменяем координаты объекта y += 5; txSleep (50); // Делаем задержку. При этом изображение окна обновляется. } txEnd(); // После цикла включаем автоматическое обновление окна // // Как *НЕ* правильно использовать блокировку: // txBegin(); while (!GetAsyncKeyState (VK_ESCAPE)) { txSetFillColor (TX_BLACK); // Очищаем окно txClear(); txSleep (50); // Первая ошибка: окно обновляется в нелогичный момент, // когда оно только что очищено. Мы увидим только черный фон. txSetFillColor (TX_DARKGRAY); // Рисуем объект, но он не будет виден. txCircle (x, y, 50); txSetFillColor (TX_LIGHTGRAY); txCircle (x, y, 30); txSetFillColor (TX_WHITE); txCircle (x, y, 10); x += 5; y += 5; txEnd(); // Вторая ошибка: при первом же обороте цикла отключается } // блокировка обновления, от чего изображение начинает мигать.
int txEnd | ( | ) |
Разблокирует обновление окна, заблокированное функцией txBegin().
Более полную информацию об автоматическом обновлении см. в функции txBegin(). См. также txRedrawWindow(), txUpdateWindow(), txSleep().
txBegin(); // Здесь изображение "замерзнет" txSetFillColor (TX_WHITE); txClear(); // Это вызвало бы мигание без txBegin() txSetFillColor (TX_RED); txRectangle (100, 100, 200, 200); txEnd(); // Здесь мы сразу увидим окончательный рисунок
void txRedrawWindow | ( | ) |
Обновляет изображение в окне TXLib вручную.
Более полную информацию об автоматическом обновлении см. в функции txBegin(). См. также txEnd(), txUpdateWindow(), txSleep().
txBegin(); // Выключаем автоматическое обновление экрана txCircle (100, 100, 50); // Рисуем -- изображение не появляется Sleep (3000); // не txSleep()! txSleep() сама обновит изображение на экране txRedrawWindow(); // Обновляем экран вручную -- изображение появляется
bool txDestroyWindow | ( | HWND | wnd = txWindow() | ) |
Уничтожает окно.
wnd | Дескриптор окна для уничтожения. Необязательно. Если не указан, уничтожается окно TXLib. |
txDestroyWindow(); // Farewell to the world
double txQueryPerformance | ( | ) |
Оценивает скорость работы компьютера.
if (txQueryPerformance() < 1) printf ("Хочется новый компьютер");
double txGetFPS | ( | int | minFrames = txFramesToAverage | ) |
Выдает количество кадров (вызовов этой функции) в секунду.
minFrames | Количество вызовов, после которых FPS начинает усредняться по последним txFramesToAverage кадрам. Необязательно. Если не указано, используется txFramesToAverage. |
minFrames
, FPS начинает усредняться по последним txFramesToAverage
кадрам. Максимальный интервал усреднения -- txFramesToAverage
кадров.unsigned txSetConsoleAttr | ( | unsigned | colors = 0x07 | ) |
Устанавливает цветовые атрибуты консоли.
colors | Цветовые атрибуты консоли. Необязательны. Если не указаны, то цвет -- светло-серый. |
Атрибуты -- это цвет текста (colorText) и цвет фона (colorBackground), объединенные вместе:
colors = colorText + colorBackground * 16
либо
colors = colorText | (colorBackground << 4)
Цвета атрибутов не имеют никакого отношения к цветам рисования, задаваемыми TX_... константами, RGB(), txSetColor(), txSetFillColor() и т.д. Значения цветов см. ниже.
Dec | Hex | Dec | Hex | ||
0 = | 0x0 | = BLACK (Черный), | 8 = | 0x8 | = DARKGRAY (Темно-серый), |
1 = | 0x1 | = BLUE (Синий), | 9 = | 0x9 | = LIGHTBLUE (Светло-синий), |
2 = | 0x2 | = GREEN (Зеленый), | 10 = | 0xA | = LIGHTGREEN (Светло-зеленый), |
3 = | 0x3 | = CYAN (Сине-зеленый), | 11 = | 0xB | = LIGHTCYAN (Светло-сине-зеленый), |
4 = | 0x4 | = RED (Красный), | 12 = | 0xC | = LIGHTRED (Светло-красный), |
5 = | 0x5 | = MAGENTA (Малиновый), | 13 = | 0xD | = LIGHTMAGENTA (Светло-малиновый), |
6 = | 0x6 | = DARKYELLOW (Темно-желтый), | 14 = | 0xE | = YELLOW (Желтый), |
7 = | 0x7 | = LIGHTGRAY (Светло-серый), | 15 = | 0xF | = WHITE (Белый). |
Цвета букв образуются соединением слов FOREGROUND_<название
цвета>, например, FOREGROUND_WHITE
.
Цвета фона образуются соединением слов BACKGROUND_<название
цвета>, например, BACKGROUND_CYAN
.
В шестнадцатеричной системе счисления атрибуты задавать так: если нужен, скажем, желтый цвет на синем фоне, то его код будет 0x1e
(старшая цифра -- старшие 4 бита -- это цвет фона, младшая цифра -- младшие 4 бита -- это цвет текста).
txSetConsoleAttr (FOREGROUND_YELLOW | BACKGROUND_BLUE); printf ("А в небе 0x1 есть город 0xE"); // (c) Б. Гребенщиков
unsigned txGetConsoleAttr | ( | ) |
Возвращает текущие цветовые атрибуты консоли.
unsigned attr = txGetConsoleAttr();
bool txClearConsole | ( | ) |
Стирает текст консоли.
При стирании используются текущие атрибуты (цвета текста и фона) консоли.
txClearConsole(); // Ну вот и все, дружок
POINT txSetConsoleCursorPos | ( | double | x, |
double | y | ||
) |
Устанавливает позицию мигающего курсора консоли.
x | X-координата курсора в пикселях. |
y | Y-координата курсора в пикселях. |
txSetConsoleCursorPos (txGetExtentX(), txGetExtentY()); // Центр Вселенной
POINT txGetConsoleCursorPos | ( | ) |
Возвращает позицию мигающего курсора консоли.
POINT pos = txGetConsoleCursorPos();
POINT txGetConsoleExtent | ( | ) |
Возвращает размер консоли.
POINT size = txGetConsoleExtent();
POINT txGetConsoleFontSize | ( | ) |
Возвращает размеры шрифта консоли.
POINT size = txGetConsoleFontSize(); txSetConsoleCursorPos (5 * size.x, 10 * size.y); // А теперь мигай вот там
bool txTextCursor | ( | bool | blink = true | ) |
Запрещает или разрешает рисование мигающего курсора в окне.
blink | false -- запретить мигающий курсор. Если не указано, то мигание разрешается. |
txTextCursor (false); ... txTextCursor();
const char* txVersion | ( | ) |
Возвращает строку с информацией о текущей версии библиотеки.
printf ("I personally love %s\n", txVersion());
unsigned txVersionNumber | ( | ) |
Возвращает номер версии библиотеки.
printf ("My magic number is %x\n", txVersionNumber());
const char* txGetModuleFileName | ( | bool | fileNameOnly = true | ) |
Возвращает имя исполняемого файла или изначальный заголовок окна TXLib.
fileNameOnly | Возвратить только полное имя исполняемого файла, полученного через Win32 функцию GetFileModuleName (NULL, ...). Необязательно. Если не указано, то возвращается полное имя исполняемого файла. |
printf ("Смотрите на заголовок окна!"); for (int done = 0; done <= 100; done++) { char title [1024] = ""; sprintf (title, "%s - [%-10.*s] %d%%", txGetModuleFileName (false), done/10, "||||||||||", done); SetWindowText (txWindow(), title); SetWindowText (Win32::GetConsoleWindow(), title); txSleep (50); } txMessageBox ("Вот такой вот progress bar", "TXLib forever)");
int txUpdateWindow | ( | int | update = true | ) |
Разрешает или запрещает автоматическое обновление изображения в окне.
update | Режим обновления (true -- разрешить, false -- запретить). Необязателен. Если не указан, то "разрешить". |
В отличие от txBegin() и txEnd(), которые поддерживают вложенные вызовы и работают как "скобки для замерзания картинки", txUpdateWindow() позволяет явно установить или снять блокировку автоматического обновления экрана.
Более полную информацию об автоматическом обновлении см. в функции txBegin(). См. также txEnd(), txRedrawWindow(), txSleep().
txUpdateWindow (false); ... txUpdateWindow();
bool txSelectObject | ( | HGDIOBJ | obj, |
HDC | dc = txDC() |
||
) |
Устанавливает текущий активный объект GDI.
obj | Дескриптор объекта GDI. |
dc | Холст (контекст рисования), в котором устанавливается текущий активный объект GDI. Необязателен. |
obj
, уничтожается.HPEN pen = CreatePen (PS_DASH, 1, RGB (255, 128, 0)); txSelectObject (pen);
bool txIDontWantToHaveAPauseAfterMyProgramBeforeTheWindowWillClose_AndIWillNotBeAskingWhereIsMyPicture | ( | ) |
Делает нечто иногда удобное. См. название функции.
У этой функции есть синоним с простым понятным названием, поищите его в файле библиотеки, около определения этой функции. Или можно скопировать набрать это километровое имя и посмотреть, что получится.
int main() { txCreateWindow (800, 600); txSetTextAlign (TA_CENTER); txTextOut (txGetExtentX()/2, txGetExtentY()/2, "Press any key to exit!");