Приклад роботи з даною конструкцією


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 do for 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.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*