Как очистить канву картинки?
, Image1->Canvas->Refresh(); не работает
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.108] |
|
|
| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Как очистить канву картинки?
, Image1->Canvas->Refresh(); не работает
|
Сообщ.
#1
,
|
|
|
|
Здравствуйте!
Рисую на картинке прямоуголиники пунктирной линией.... ![]() ![]() void __fastcall TMap::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { blMouseDown = true; //рисование прямоугольника Image1->Canvas->Refresh();//делаем рефреш, чтобы не было другого прямоугольника видно mx=X; my = Y;//сохраняем координаты начала } ![]() ![]() void __fastcall TMap::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { blMouseDown = false; //рисование прямоугольника mx1=X; my1=Y ;//сохраняем координаты конца } ![]() ![]() void __fastcall TMap::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { //рисование треугольника if (blMouseDown) { Image1->Canvas->Refresh();//Делаем рефреш, чтобы когда мы меняли размеры прямоугольника не было бы шлейфа Image1->Canvas->Pen->Style=psDash;//пунктирная линия, можно это писать не тут... Image1->Canvas->Rectangle(mx, my, X, Y );//рисуем на форме выделение } } Image1->Canvas->Refresh(); НЕ ХОЧЕТ ОЧИЩАТЬ НАРИСОВАННОЕ.... Может вопрос примитивен, то зарание извеняюсь.... Я наверное чего-то не знаю.... |
|
Сообщ.
#2
,
|
|
|
|
я точно не знаю(билдера под рукой нету), но может быть есть метод типа Image1->Canvas->Clear()? Просто Refresh() вызывает перерисовку канвы, а не очистку. Видишь между этим разницу?
|
|
Сообщ.
#3
,
|
|
|
|
Цитата miksayer @ я точно не знаю(билдера под рукой нету), но может быть есть метод типа Image1->Canvas->Clear()? Просто Refresh() вызывает перерисовку канвы, а не очистку. Видишь между этим разницу? Я понял... Но к сожелеию такого метода нет в канве. Смотрел справку по TCanvas тоже там не нашел интересного... |
|
Сообщ.
#4
,
|
|
|
|
канва не очищается а закрашивается.
|
|
Сообщ.
#5
,
|
|
|
|
Да, метода очистки нет, надо просто закрашивать, например, белым прямоугольником на весь имейдж
|
|
Сообщ.
#6
,
|
|
|
|
Цитата mr.Torrens @ Да, метода очистки нет, надо просто закрашивать, например, белым прямоугольником на весь имейдж Хороший вариант если картинка чистая. А что мне делать если у меня на картинке рисунок и мне нужно его видеть? |
|
Сообщ.
#7
,
|
|
|
|
Цитата А что мне делать если у меня на картинке рисунок и мне нужно его видеть? Хранить рисунок в битмапе, в момент перерисовки сначала загружать чистый рисунок из битмапа, потом на нем уже рисовать. Другой вариант - наложить еще один имедж поверх первого, установить ему прозрачность и рисовать в нем. |
|
Сообщ.
#8
,
|
|
|
|
Тогда просто перезагрузи рисунок :
![]() ![]() Image1->Picture Т.е. просто заново загрузи в TImage рисунок, если всё правильно понял, должно помочь! |
|
Сообщ.
#9
,
|
|
|
|
Всем спасибо за помощь
Мой код: ![]() ![]() void __fastcall TMap::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Image1->Picture->Bitmap->LoadFromFile("C:/map.bmp"); mx=X; my = Y;//сохраняем координаты начала } ![]() ![]() void __fastcall TMap::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (GetAsyncKeyState(VK_LBUTTON)) { Image1->Picture->Bitmap->LoadFromFile("C:/map.bmp"); Image1->Canvas->Pen->Style=psDash; Image1->Canvas->Rectangle(mx, my, X, Y ); } } |
|
Сообщ.
#10
,
|
|
|
|
Цитата ![]() ![]() Image1->Picture->Bitmap->LoadFromFile("C:/map.bmp"); Лучше создать объект TBitmap, единожды загрузить в него рисунок и потом в имейдж просто копировать содержимое битмапа. Постоянная загрузка из файла это лишние временные затраты и плюс может быть мерцание. |
|
Сообщ.
#11
,
|
|
|
|
mr.Torrens
Добавлю только что и рисовать нужно тоже в Bitmap-е,а затем просто выводить его на любую канву. |
|
Сообщ.
#12
,
|
|
|
|
Цитата mr.Torrens @ Цитата ![]() ![]() Image1->Picture->Bitmap->LoadFromFile("C:/map.bmp"); Лучше создать объект TBitmap, единожды загрузить в него рисунок и потом в имейдж просто копировать содержимое битмапа. Постоянная загрузка из файла это лишние временные затраты и плюс может быть мерцание. Примером можно? |
|
Сообщ.
#13
,
|
|
|
|
можно
![]() ![]() Graphics::TBitmap* pic_bitmap; pic_bitmap = new Graphics::TBitmap; // грузим в него картинку pic_bitmap->LoadFromFile("c:\\map.bmp"); // загружаем в имейдж картинку из битмапа Image2->Picture->Bitmap = pic_bitmap; // рисуем; потом, когда надобадет перетереть старый рисунок просто перезагружаем картинку из битмапа |
|
Сообщ.
#14
,
|
|
|
|
Цитата mr.Torrens @ можно ![]() ![]() Graphics::TBitmap* pic_bitmap; pic_bitmap = new Graphics::TBitmap; // грузим в него картинку pic_bitmap->LoadFromFile("c:\\map.bmp"); // загружаем в имейдж картинку из битмапа Image2->Picture->Bitmap = pic_bitmap; // рисуем; потом, когда надобадет перетереть старый рисунок просто перезагружаем картинку из битмапа О понятно Огромное спасибо |
|
Сообщ.
#15
,
|
|
|
|
всегда рад
|