0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 11
|
|
1 | |
Очистка Canvas объекта TImage26.04.2015, 16:54. Показов 10728. Ответов 18
Метки нет Все метки)
(
Здравствуйте! Знаю, вопрос очень популярный и на него неоднократно давались ответы на самых разных ресурсах, но так получилось, что меня найденные ответы не устроили. Обрисую ситуацию поподробнее.
Есть объект TImage. В него загружен рисунок, который является фоном, помогающим пользователю при работе. Поверх - на Canvas - пользователь рисует нечто, что потом программой обсчитывается. Если данные, на которых основан рисунок, меняется (самый простой вариант - пользователь что-то хочет удалить), то необходимо, разумеется, как-то это все стереть и перерисовать заново. Несколько решений я нашел и испытал, но неудачно. Что испытывалось: 1) Нарисовать поверх прямоугольник. Сначала решение было отброшено, поскольку нужна картинка TImage, но затем я к нему вернулся. Попытался сохранить картинку в битмап, а затем рисовать ее поверх вместо рекомендуемого прямоугольника, но Delphi отказалась работать с битмапами. Возможно, я что-то забыл подключить 2) Присвоение Null'а. Кое-где рекомендовалось, но, видимо, это решение требует каких-то специальных плясок с бубнами либо заведомо нерабочее из-за представления данных в Delphi или чего-то в этом роде 3) Заменить TImage на TPaintBox. Утверждают, что этот элемент проще заставить делать подобные вещи, но, похоже, у меня недостаточно прямые руки для этого - элемент просто куда-то исчез после запуска и выходить отказался Собственно, может ли кто-то что-то подсказать по поводу решения? Прошу прощения за обилие подробностей, хотелось раскрыть проблему получше
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
26.04.2015, 16:54 | |
Ответы с готовыми решениями:
18
Canvas в TImage Canvas - Draw. на TImage Рисование на TImage.Canvas
|
26.04.2015, 21:55 | 2 | |||||
paintbox - Это и есть решение, потому что там всегда все рисуется заново
рисуешь фон из битмапа, потом все остальное
0
|
13082 / 5867 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
27.04.2015, 07:43 | 3 | ||||||||||
Не NULL, а NIL - работает железно.
Очистка канвы экземпляра TImage. При этом цвет фона будет принят равным цвету фона родителя - формы или панели, на которой лежит экземпляр TImage:
0
|
0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 11
|
||||||
29.04.2015, 20:24 [ТС] | 4 | |||||
krapotkin, спасибо за подсказку. Попробовал переписать под PaintBox, вышло довольно странно. Во-первых, рисует только если изменить размер формы. Во-вторых, битмапы все равно не рисуются. Сам что-то недошурумпумпухиваю, что могло пойти не так. Кусок кода, если поможет (в точности ваш повторять не стал, потому что не все понял, а карго-программированием заниматься не хочется)
![]() ![]()
0
|
0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 11
|
|
30.04.2015, 20:26 [ТС] | 6 |
Понятно. Сильно не пугайтесь, там кое-где те еще извращения, традиционно так вышло
0
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
|
|
30.04.2015, 22:46 | 7 |
а почему бы не использовать слои? TImage один на одном, в нижний загружаем фон, в верхнем рисуем сами
0
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
|
|
01.05.2015, 13:05 | 9 |
у фотожопа получилось же, а чем ты хуже?
0
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
|
|
01.05.2015, 16:35 | 11 |
а что не так-то? допустим в нижнем храним фон, верхний реагирует на события, после обновления конвы в среднем слое смешивается фон и то, что нарисовали и верхний слой очищается. можно добавить динамический массив для хранения всех изменений, менять их порядок и работать с каждым отдельно... и вуаля, у вас самопальный фотожоп
0
|
0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 11
|
|
01.05.2015, 19:19 [ТС] | 13 |
Побуду немного крысой. Sinner, если сделать два TImage'а один над другим, то при очистке верхнего он закроет нижний сплошным цветом, поскольку варианты очистки - см. первое мое сообщение. Фотошоп действует по совершенно другим принципам. Динамический массив - это ужасное решение, у меня, например, сохранилось с доисторических времен.
0
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
|
|
02.05.2015, 05:54 | 15 |
давно было дело, играл со спрайтами, всегда всё отлично было, сейчас даже специально повторил программно свои слова. спокойно заполняются оба TImage, и очищаются nil. это 2 независимых объекта
0
|
0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 11
|
|
09.05.2015, 10:49 [ТС] | 17 |
Да, действительно, как-то я об этом не подумал
![]()
0
|
0 / 0 / 0
Регистрация: 02.05.2014
Сообщений: 11
|
|
10.05.2015, 08:08 [ТС] | 19 |
Блин, это такой фейл...
![]() ![]() ![]()
0
|
10.05.2015, 08:08 | |
Помогаю со студенческими работами здесь
19
Ожидание окончания отрисовки Canvas / очистка драйвера "Мелькание" при ривовании на Timage.Canvas Мерцание компонента Timage и перемещение Timage при нажатии Очистка TImage Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |