Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

рисование на 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]

Рисуешь по месту где надо линию. Рисуешь второй раз по тому же месту - стираешь линию.


Наверх

Титульная страница Поиск, карта сайта Написать письмо