![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
В TImage загружена bmp, поверх рисуется объект (постоянно перемещается). Свойство кисти NotXor теперь не помогает - траектория движения остается все равно (с пустым Image'м работало). Собственно вопрос: как от этого избавиться?
Загрузка картинки: Код:
OpenPictureDialog1.InitialDir:=GetCurrentDir;
if OpenPictureDialog1.Execute then
begin
Fname:=OpenPictureDialog1.FileName;
with Form1 do
begin
img1.AutoSize:=True;
img1.Picture.LoadFromFile(Fname);
img1.Picture.Bitmap.Canvas.Brush.Style:=bsClear;
...
end;После различных вычислений и тд рисование: Код:
//fld.Canvas.FillRect(Rect(0,0,wdth,hght)); fld.Canvas.MoveTo(ship_back.X,ship_back.Y); fld.Canvas.LineTo(ship_front.X,ship_front.Y); fld.Canvas.Ellipse(ship_front.X-2,ship_front.Y-2,ship_front.X+2,ship_front.Y+2); Без картинки можно было использовать филлрект, но теперь это вызовет белый прямоугольник. Нужно именно перерисовывать объект поверх картинки, удаляя его предыдущее положение. Можно, конечно, каждый раз заново грузить картинку, но это ерунда (fld и img1 - один и тот же TImage) |
|
#2
|
||||
|
||||
|
Более правильно иметь "задниий буфер". Создаются 2 битмапа, в первом хранится оригинальная картинка и копируется во-второй, в котором проводится нужная отрисовка. После этого 2 битмап присваивается в TImage.
|
|
#3
|
|||
|
|||
|
Так и сделал, спасибо.
Еще один вопрос: не меняется цвет рисования в битмапе (либо серый, либо черный) Код:
bm_ship.Assign(bm_orig); bm_ship.Canvas.MoveTo(ship_back.X,ship_back.Y); bm_ship.Canvas.LineTo(ship_front.X,ship_front.Y); bm_ship.Canvas.Ellipse(ship_front.X-2,ship_front.Y-2,ship_front.X+2,ship_front.Y+2); fld.Picture.Bitmap:=bm_ship; Код:
bm_ship.Canvas.Pen.Color:=clRed; |
|
#4
|
||||
|
||||
|
Выставляй цвет после присвоения битмапа.
Последний раз редактировалось angvelem, 01.04.2012 в 01:59. |
|
#5
|
|||
|
|||
|
Все равно никак не могу понять, в чем дело: не меняется цвет и все тут(. Куда только строчку с присвоением цвета не вставлял)
Код:
... bm_ship.Assign(bm_orig); bm_ship.PixelFormat:=pf32bit; bm_ship.Canvas.Pen.Color:=clRed; bm_ship.Canvas.MoveTo(ship_back.X,ship_back.Y); bm_ship.Canvas.LineTo(ship_front.X,ship_front.Y); bm_ship.Canvas.Ellipse(ship_front.X-2,ship_front.Y-2,ship_front.X+2,ship_front.Y+2); fld.Picture.Bitmap:=bm_ship; ... |
|
#6
|
||||
|
||||
|
Прекрасно рисуется нужным цветом:
Код:
procedure TForm2.FormCreate(Sender: TObject);
var
bm1,
bm2 : TBitmap;
begin
bm1 := TBitmap.Create;
try
bm1.LoadFromFile('1111.bmp');
bm2 := TBitmap.Create;
try
bm2.Assign(bm1);
bm2.PixelFormat := pf32bit;
bm2.Canvas.Pen.Color:=clRed;
bm2.Canvas.MoveTo(10, 10);
bm2.Canvas.LineTo(50, 10);
bm2.Canvas.Ellipse(20, 20, 80, 40);
Image1.Picture.Bitmap := bm2;
finally
bm2.Free;
end;
finally
bm1.Free;
end;
end; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
MrBadge (04.04.2012)
| ||