![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
очистить прозрачный canvas
пигмалеон © (2006-06-29 15:43:00)проблема, у меня прозрачный canvas, соответственно, рисую на нем картинку, но когда рисую следующую картинку, то под ней видна предыдущая - это не устраивает; вопрос: как можно очистить canvas, при этом сохранить его прозрачным, пробовал fillrect - не выходит, кто-нить знает?
Мефисто (2006-07-03 22:06:00) [1]
> А что битмеп скапировать на канвас не судьба?
Можно, но не нужно.
Использовать промежуточный битмап, там где он не нужен - совершенно ни кчему :) (это если учитывать что создает автор - топиками выше)
antonn (2006-07-03 19:53:00) [2]bssolid - использует canvas.brush, bsclear не использует. При использовании canvas.fillrect() никакой рамки не будет в любом случае.
Pavia (2006-07-03 19:30:00) [3]Пробовал работает.
Читай внимательней.
> bsSolid - F1 о другом говорит
Что значит о другом?
bsSolid- ресует закрашенный прямоугольник.
bsClear- рисут рамку.
> И для системы нет такого понятия прозрачный цвет :)
Есть.
> Темболее вопрос ставился по Canvas в целоом, а не возможность
> реализации исключения TransparentColor классом TBitmap,
> как по примеру выше.
А что битмеп скапировать на канвас не судьба?
Canvas.Draw(0,0,Bitmap)
И будет тебе счастье.
Мефисто (2006-07-03 18:40:00) [4]
> Точно.
А ты сам попробуй :)
> Мы жи прозрачным цветом закрашываем Brush.Style:=bsSolid.
bsSolid - F1 о другом говорит. И для системы нет такого понятия прозрачный цвет :) Темболее вопрос ставился по Canvas в целоом, а не возможность реализации исключения TransparentColor классом TBitmap, как по примеру выше.
Ответ уже дан выше
> отрисовывать надо только на событие WM_PAINT, а когда приспичило
> - делать Invalidate...
Pavia (2006-07-03 18:12:00) [5]
> Точно помогает?
Точно. Мы жи прозрачным цветом закрашываем 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-01 22:36:00) [6]
> Использовать fillrect
Точно помогает?
Pavia (2006-07-01 17:18:00) [7]Использовать fillrect предворительно установив pen и brush прозрачным цветом и выбрать способ заливки bsSolid
homm (2006-06-30 19:49:00) [8]я чегото не понимаю!! Первый и второй раз как-то разделены во времени? Тогда вообще не понял вопроса, сделай рефреш родителя. А если нет, и первая прорисовка не нужна, то зачем ее делать?
han_malign (2006-06-30 16:15:00) [9]
> canvas у меня с brush.style:=csClear, соответственно, он прозрачный
- это означает, что он не заполняется фоновым цветом при отрисовке графических примитивов - никакой прозрачности у компонентов нет в принципе - все окна прорисовываются по очереди в Z порядке. Тут тебе не Avalon с Direct3D...
Просто не нажно тупо отрисовывать на canvas когда приспичило - отрисовывать надо только на событие WM_PAINT, а когда приспичило - делать Invalidate...
пигмалеон (2006-06-30 15:51:00) [10]нет, первый раз канва и так чистая, а вот затем...
homm (2006-06-30 13:18:00) [11]> какой фон? куда копируется? объясняю еще подробнее, canvas
> у меня с brush.style:=csClear, соответственно, он прозрачный,
> я на него при помощи copyrect копирую одно изображение,
> потом другое, но так как эти два изображения отличаются
> друг от друга по форме, то под вторым изображением видно
> первое, задача - перед отрисовкой второго изображения сделать
> canvas чистым, сохранив его прозрачность
Не рисовать первый раз???
пигмалеон (2006-06-30 00:28:00) [12]нет, компонент - потомок tgraphiccontrol, является кнопкой, есть несколько bitmap отображающих различные состояния этой кнопки, bitmap отображается по маске, то есть делаю маску из картинки, а потом по ней при помощи copyrect копирую на прозрачный canvas (то есть видно, что находится под компонентом), так вот при каждом copyrect остается предыдущее изображение и оно видно из-под нового, поэтому canvas нужно перед отрисовкой очищать, в этом-то и проблема, как очистить canvas, сохраняя его прозрачным
Мефисто (2006-06-29 20:02:00) [13]Задачю обрисуй в целом.
TPaintBox ?
пигмалеон (2006-06-29 19:18:00) [14]какой фон? куда копируется? объясняю еще подробнее, canvas у меня с brush.style:=csClear, соответственно, он прозрачный, я на него при помощи copyrect копирую одно изображение, потом другое, но так как эти два изображения отличаются друг от друга по форме, то под вторым изображением видно первое, задача - перед отрисовкой второго изображения сделать canvas чистым, сохранив его прозрачность
antonn (2006-06-29 18:40:00) [15]что значит прозрачный?
там просто фон перед перерисовкой копируется на канвас. Ну вот и копируй:)
пигмалеон (2006-06-29 18:28:00) [16]очистить его и сделать прозрачным, то есть чтобы вместо рисунка появилась прозрачность и ничего более :)
antonn (2006-06-29 16:14:00) [17]скопировать на него то, что под ним?