Главная страница
    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.48 MB
Время: 0.047 c
1-1168191923
Yozch1
2007-01-07 20:45
2007.02.25
Обработка VTV из консольного приложения.


3-1165230091
kivadim
2006-12-04 14:01
2007.02.25
как отобразить юникодовские символы из базы в отчете FastReports


8-1151496434
Andrey_G
2006-06-28 16:07
2007.02.25
Многопоточный звук


15-1170606291
Calibr
2007-02-04 19:24
2007.02.25
JavaScript


15-1170321015
Vaitek__
2007-02-01 12:10
2007.02.25
Используете ли вы Wi-Fi?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский