Пример быстрой работы с графикой в среде Windows без использования средств DirectX
Совместимость: Windows 95, 98, NT, 2000, Me, TrE, XP, Whistler, Tristler :))
Пример работы с данной конструкцией:
SX - текущий размер нашего "экрана" по горизонтали
SY - по вертикали
TBig(Scr^). Scr - это указатель на массив пикселей битмапа, который в нашем случае
имеет разрядность 32 (32 бита, или 4 байта на пиксел, что эквивалентно типу Integer.
См. объявление типа TBig). Конструкция TBig(Scr^) позволяет адресовать эту память как массив пиксел.
Чтобы получить доступ к пикселу нужно использовать индекс массива [x + y * SX].
Функция RGB. Это стандартная делфяцкая функция, не приспособленная для того что мы тут творим,
а только для своего "родного" класс TCanvas и его цветовых кодов. В Windows при использовании
32-разрядных битмапов формат пиксела такой (начиная с первого байта):
BBBBBBBB GGGGGGGG RRRRRRRR ********
В Delphi (то что ВСЕГДА возвращает функция RGB, при любой разрядности картинки):
RRRRRRRR GGGGGGGG BBBBBBBB ********
Усматривается аналогия :) Все что нужно это просто перечислить аргументы функции в обратном порядке :))
TBig(Scr^)[x + y * SX] := RGB(B, G, R);
B, G, R - соответственно значения интенсивности синего, зеленого, и красного цветов размером байт, т.е. [0..255].
Палитра 32-разрядным режимом не поддерживается, за нас думает Windows
(вернее, понятия палитры в таком режиме вообще нет). Ну а нам остается это все юзать как надо +)))
Чтобы почистить виртуальный экран, нужно сделать так: ZeroMemory(Scr, SX * SY * 4);
procedure TfmMain.Timer1Timer(Sender: TObject);
var
x, y: Integer;
begin// В цикле рисуется полная левота. Рисуйте тут свою левоту :)for x := 0 to SX - 1 dofor y := 0 to SY - 1 do
TBig(Scr^)[x + y * SX] := RGB(Random(256),Random(256),Random(256));
// При желании, используем средства Delphi на объекте ScrBitmap типа TBitmap// в т.ч. можно нарисовать на нем другой Bitmap с помощью функции// ScrBitmap.Canvas.Draw(x,y,AnotherBitmap);// Чтобы текст выглядел красивее (без фона), раскомментируйте строки// SetBkMode(ScrBitmap.Canvas.Handle, TRANSPARENT);
ScrBitmap.Canvas.Font.Size := 24;
ScrBitmap.Canvas.TextOut(10, 10, 'Demo');
// SetBkMode(ScrBitmap.Canvas.Handle, OPAQUE);// Нарисуемся
pbDrawPaint(Self);
end;
end.
Пример быстрой работы с графикой в среде Windows без использования средств DirectX для создания и отображения битмапа на форме приложения.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.