Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

очистить прозрачный canvas   Найти похожие ветки 

 
пигмалеон   (2006-06-29 15:43) [0]

проблема, у меня прозрачный canvas, соответственно, рисую на нем картинку, но когда рисую следующую картинку, то под ней видна предыдущая - это не устраивает; вопрос: как можно очистить canvas, при этом сохранить его прозрачным, пробовал fillrect - не выходит, кто-нить знает?


 
antonn ©   (2006-06-29 16:14) [1]

скопировать на него то, что под ним?


 
пигмалеон   (2006-06-29 18:28) [2]

очистить его и сделать прозрачным, то есть чтобы вместо рисунка появилась прозрачность и ничего более :)


 
antonn ©   (2006-06-29 18:40) [3]

что значит прозрачный?
там просто фон перед перерисовкой копируется на канвас. Ну вот и копируй:)


 
пигмалеон   (2006-06-29 19:18) [4]

какой фон? куда копируется? объясняю еще подробнее, canvas у меня с brush.style:=csClear, соответственно, он прозрачный, я на него при помощи copyrect копирую одно изображение, потом другое, но так как эти два изображения отличаются друг от друга по форме, то под вторым изображением видно первое, задача - перед отрисовкой второго изображения сделать canvas чистым, сохранив его прозрачность


 
Мефисто   (2006-06-29 20:02) [5]

Задачю обрисуй в целом.
TPaintBox ?


 
пигмалеон   (2006-06-30 00:28) [6]

нет, компонент - потомок tgraphiccontrol, является кнопкой, есть несколько bitmap отображающих различные состояния этой кнопки, bitmap отображается по маске, то есть делаю маску из картинки, а потом по ней при помощи copyrect копирую на прозрачный canvas (то есть видно, что находится под компонентом), так вот при каждом copyrect остается предыдущее изображение и оно видно из-под нового, поэтому canvas нужно перед отрисовкой очищать, в этом-то и проблема, как очистить canvas, сохраняя его прозрачным


 
homm ©   (2006-06-30 13:18) [7]

> какой фон? куда копируется? объясняю еще подробнее, canvas
> у меня с brush.style:=csClear, соответственно, он прозрачный,
> я на него при помощи copyrect копирую одно изображение,
> потом другое, но так как эти два изображения отличаются
> друг от друга по форме, то под вторым изображением видно
> первое, задача - перед отрисовкой второго изображения сделать
> canvas чистым, сохранив его прозрачность

Не рисовать первый раз???


 
пигмалеон   (2006-06-30 15:51) [8]

нет, первый раз канва и так чистая, а вот затем...


 
han_malign ©   (2006-06-30 16:15) [9]


> canvas у меня с brush.style:=csClear, соответственно, он прозрачный

- это означает, что он не заполняется фоновым цветом при отрисовке графических примитивов - никакой прозрачности у компонентов нет в принципе - все окна прорисовываются по очереди в Z порядке. Тут тебе не Avalon с Direct3D...

Просто не нажно тупо отрисовывать на canvas когда приспичило - отрисовывать надо только на событие WM_PAINT, а когда приспичило - делать Invalidate...


 
homm ©   (2006-06-30 19:49) [10]

я чегото не понимаю!! Первый и второй раз как-то разделены во времени? Тогда вообще не понял вопроса, сделай рефреш родителя. А если нет, и первая прорисовка не нужна, то зачем ее делать?


 
Pavia ©   (2006-07-01 17:18) [11]

Использовать fillrect предворительно установив pen  и brush прозрачным цветом и выбрать способ заливки bsSolid


 
Мефисто   (2006-07-01 22:36) [12]


> Использовать fillrect


Точно помогает?


 
Pavia ©   (2006-07-03 18:12) [13]


> Точно помогает?

Точно. Мы жи прозрачным цветом закрашываем Brush.Style:=bsSolid.
bsSolid- ресует закрашенный прямоугольник.
bsClear- рисут рамку.

with Bitmap do
begin
canvas.Brush.Color:=TransParentColor;
canvas.Brush.Style:=bsSolid;
canvas.Pen.Color:=TransParentColor;
Canvas.FillRect(rect(0,0,Width,Height));
end;


 
Мефисто   (2006-07-03 18:40) [14]


> Точно.


А ты сам попробуй :)


> Мы жи прозрачным цветом закрашываем Brush.Style:=bsSolid.


bsSolid - F1 о другом говорит. И для системы нет такого понятия прозрачный цвет :) Темболее вопрос ставился по Canvas в целоом, а не возможность реализации исключения TransparentColor классом TBitmap, как по примеру выше.

Ответ уже дан выше


> отрисовывать надо только на событие WM_PAINT, а когда приспичило
> - делать Invalidate...


 
Pavia ©   (2006-07-03 19:30) [15]

Пробовал работает.
Читай внимательней.

> bsSolid - F1 о другом говорит

Что значит о другом?
bsSolid- ресует закрашенный прямоугольник.
bsClear- рисут рамку.

> И для системы нет такого понятия прозрачный цвет :)

Есть.

> Темболее вопрос ставился по Canvas в целоом, а не возможность
> реализации исключения TransparentColor классом TBitmap,
> как по примеру выше.

А что битмеп скапировать на канвас не судьба?
Canvas.Draw(0,0,Bitmap)
И будет тебе счастье.


 
antonn ©   (2006-07-03 19:53) [16]

bssolid - использует canvas.brush, bsclear не использует. При использовании canvas.fillrect() никакой рамки не будет в любом случае.


 
Мефисто   (2006-07-03 22:06) [17]


> А что битмеп скапировать на канвас не судьба?


Можно, но не нужно.
Использовать промежуточный битмап, там где он не нужен - совершенно ни кчему :) (это если учитывать что создает автор - топиками выше)



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
15-1170251680
Ученик чародея
2007-01-31 16:54
2007.02.25
PHP vs Delphi.


1-1168191923
Yozch1
2007-01-07 20:45
2007.02.25
Обработка VTV из консольного приложения.


15-1170301267
Slider007
2007-02-01 06:41
2007.02.25
С днем рождения ! 1 февраля


15-1170519024
hmmm
2007-02-03 19:10
2007.02.25
PHP как получить адресную строку


2-1170885198
MegaNop
2007-02-08 00:53
2007.02.25
Поменять цвет PageControl1