Приклад роботи з даною конструкцією, Робота з графікою, Delphi, статті


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>

*

*