![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
рисование на Canvas не повреждая фон
_Alex_ © (2003-05-06 20:48:00)
Рисую через Canvas на Image простый фигуры, точки
линии все это иногда движется и т.д.
Как двигать их не стирая фон, на заднем фоне рисунок.
Знаю что связанно что-то c Pen.Mode:=mbXor,
подскажите.
Trapper (2003-05-12 17:32:00) [1]
Попробуй использовать дополнительную картинку TBitmap. Перед запуском приложения загрузи туда твою картинку. А в цикле прорисовки перед самой прорисовкой сделай Image.Assign(bitmap). После этого рисуй все, что тебе угодно. Фон останется на месте.
alexander_o (2003-05-12 16:23:00) [2]
я использую фиксированное количество объектов на PaintBox и перерисовываю их в нужном случае (FormActivate, etc)
_Alex_ (2003-05-09 12:43:00) [3]
Еще одна проблема, точки рисованые на PaintBox стираются если окно свернуть, а затем востановить
_Alex_ (2003-05-09 10:43:00) [4]Поставил сверху PaintBox, но если у него включаешь режими mbXor,
получается такая же ситуация, я рисую около 300-500 точек на рисунке
752*458, когда они начинают пролетать по фону, цвет инвертируется.
Сделал таким образом:
запоминаю цвет под точкой(на Image1) и стираю ее этим цветом (на PaintBox1)
c[i]:=Image1.Canvas.Pixels[x[i],y[i]];
PutPixel(x[i],y[i],clRed{[i]});
//...
( x[i],y[i],c[i])Поставил сверху PaintBox, но если у него включаешь режими mbXor,
получается такая же ситуация, я рисую около 300-500 точек на рисунке
752*458, когда они начинают пролетать по фону, цвет инвертируется.
Сделал таким образом:
запоминаю цвет под точкой(на Image1) и стираю ее этим цветом (на PaintBox1)
c[i]:=Image1.Canvas.Pixels[x[i],y[i]];
PutPixel(x[i],y[i],clRed{[i]});
//...
PutPixel(x[i],y[i],c[i])
//
procedure PutPixel(x_c,y_c,c_c: integer);
begin
Form1.PaintBox1.Canvas.Pen.Color:=c_c;
Form1.PaintBox1.Canvas.Rectangle(x_c,y_c,x_c+1,y_c+1);
end;
но точки полючаются мелковаты
а если
Form1.PaintBox1.Canvas.Rectangle(x_c,y_c,x_c+2,y_c+2);
то точка будет занимать 4 пиксела и придеться запоминать уже 4 цвета для каждой точки,
Как можно обойти эту ситуацию?
_Alex_ (2003-05-08 20:07:00) [5]
спасибо за ответы попробую
alexander_o (2003-05-08 11:09:00) [6]
столкнулся с подобной проблемой и решил это так:
я использовал для этого TPaintBox сверху, TImage с картинкой внизу - в TImage кладу картинку, которая мне нужна в данный момент, а на TPaintBox рисую что хочу
MBo (2003-05-07 16:48:00) [7]
тогда сохраняй фон и перерисовывай его
_Alex_ (2003-05-07 15:55:00) [8]
при этом цвета инвертируются
а мне этого не надо
pasha676 (2003-05-07 09:21:00) [9]
Рисуешь по месту где надо линию. Рисуешь второй раз по тому же месту - стираешь линию.