Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

очистить прозрачный 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 вся ветка

Форум: "Media";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.062 c
2-1170940448
pathfinder
2007-02-08 16:14
2007.02.25
Объявление функций.


2-1170850723
smaller
2007-02-07 15:18
2007.02.25
Не ловится исключительная ситуация:


15-1170316086
@!!ex(from work)
2007-02-01 10:48
2007.02.25
PC must die


2-1170255228
Гость_
2007-01-31 17:53
2007.02.25
Заголовок в гриде сделать вертикальным


15-1170457040
DillerXX
2007-02-03 01:57
2007.02.25
Подскажите с анимацией.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский