Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Хранение изображений и их склеивание


Автор: L. Joe 12.3.2003, 05:14
Моя программа в процессе работы генерирует изображения, которые должны являються слоями одного целого (это целое выводится на экран с помощью TPaintBox). Как и где можно хранить изображения-слои, чтобы их там же можно было редактировать? Как их потом "склеть", чтобы не копировался белый фон?

Если в вопросе что-то не понятно - спрсите.

Автор: neutrino 12.3.2003, 05:24
Hranit' v TBitmap, naprimer. A skleit' mojno tak: samyi' nijnii' risuetsja pervyi' potom tot, chto nad nim. A cveta... Nu opredeli kakoi' budet prozrachnyi' cvet (kak ty skazal belyi') i risui' popiksel'no vse cveta, krome nego. Pravda dolgo budet rabotat'. Skoree vsego dlja jetogo uje est' gotovye funkcii.

Автор: L. Joe 12.3.2003, 06:23
А как рисовать на TBitMap? В книге написано что его TCanvas - только для чтения. Через API чё-то не получается (может дашь примерчик).

Автор: December 13.3.2003, 04:13
Bitmap.Canvas[0,0]:=clRed
Вот тебе рисование.
Или: Bitmap.Canvas.lineto(100,100)
но лучше пользоваьбся ScanLine - быстрее в несколко раз.

Автор: L. Joe 13.3.2003, 06:22
Я пишу:
Код

procedure TForm1.FormPaint(Sender: TObject);
var b: TBitMap;
     r: TRect;
begin
   b := TBitMap.Create;
   r := Rect(0, 0, 100, 100);
   b.Canvas.LineTo(100,100);
   Form1.Canvas.CopyRect(r, b.Canvas, r);
end;

Но на форме ничего не рисуется. Может что не так?

Автор: December 13.3.2003, 06:57
b := TBitMap.Create;
> b.Width:=100;
> b.Height:=100;
r := Rect(0, 0, 100, 100);
b.Canvas.MoveTo(0,0);
b.Canvas.LineTo(100,100);
Form1.Canvas.CopyRect(r, b.Canvas, r);
> b.Free; !!!!! Never forget to free resources!!!!

Автор: L. Joe 13.3.2003, 07:30
Спасибо, работает. Оказывается TBitMap по умолчанию создаётся с нулевыми размерами.

А как сделать чтобы изображение копировалось без фона, т.е. только сама линия?

Автор: December 13.3.2003, 09:16
Bitmap.transparent
or
Canvas.CopyMode

Автор: L. Joe 13.3.2003, 23:31
Долго копался в справке, наконец нашёл пример - всё получилось. Оказывается если не указать TBitMap.TransparentColor, то прозрачным будет цвет самого левого нижнего пикселя.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)