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

Вниз

Тормозит отрисовка на Bitmap-е   Найти похожие ветки 

 
AlexeyT ©   (2006-03-21 14:01) [0]

Компонент рисует на Bitmap-е, потом выводит этот битмеп через Canvas.Draw на основную форму. Проблема в том, что отрисовка на битмепе тормозит:

1) При отрисовке большого числа строк теста через Canvas.TextOut (тормозит при числе строк от 200)
2) Особенно тормозит при раскраске фона битмепа таким кодом:
procedure SelectRect(Canvas: TCanvas; const Rect: TRect);
var
 X, Y: integer;
begin
 with Canvas do
   for X:= Rect.Left to Rect.Right-1 do
     for Y:= Rect.Top to Rect.Bottom-1 do
       Pixels[X, Y]:= Pixels[X, Y] xor clWhite;  
end;


(тормозит при числе раскрашенных строк от 5).

Подскажите, что можно тут ускорить? Задача компонента - выводить текст с раскраской фона. Почти то же, что делает TMemo, но TMemo же не тормозит?


 
MBo ©   (2006-03-21 14:09) [1]

Pixels[X, Y]:= Pixels[X, Y] xor clWhite;  
Зачем попиксельно делать инверсию - можно сделать одним вызовом bitblt c SRCINVERT


 
MBo ©   (2006-03-21 14:10) [2]

Еще проще - InvertRect


 
AlexeyT ©   (2006-03-21 17:10) [3]


> MBo ©   (21.03.06 14:09) [1]

Со вторым пунктом ясно, сделаю через InvertRect или ScanLine.
А что делать с первым пунктом?


 
MBo ©   (2006-03-21 17:16) [4]

>А что делать с первым пунктом?
API-функция DrawText


 
AlexeyT ©   (2006-03-21 19:02) [5]


> API-функция DrawText

Т.е. рисовать (через DrawText) придется прямо на контроле, минуя битмеп?
Я-то хотел все нарисовать прямо в битмепе, а потом битмеп выводить на канву контрола...


 
AlexeyT ©   (2006-03-21 22:40) [6]

А, sorry, DrawText рисует и на битмепе тоже.
Но она ничем не лучше ExtTextOut, которую использует Canvas.TextOut.
В общем, не знаю, что еще можно оптимизировать. Отрисовка ускоряется, если уменьшить размеры битмепа (сейчас он 1600*1200), но размеры должны быть достаточными для того, чтобы вместить весь экран...

Хорошо бы посмотреть пример компонента, рисующего текст на канве, без тормозов...


 
MBo ©   (2006-03-22 05:49) [7]

DrawText может выводить много строк сразу - вот отсюда и может быть выигрыш


 
ЮЮ ©   (2006-03-22 12:54) [8]


> Почти то же, что делает TMemo, но TMemo же не тормозит?

Он рисует только видимые строки, а ты " (тормозит при числе строк от 200)"



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

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

Наверх




Память: 0.46 MB
Время: 0.045 c
2-1162267874
viper03
2006-10-31 07:11
2006.11.19
Как извлечь объект из ЛистБокса?


15-1162384753
IronHawk
2006-11-01 15:39
2006.11.19
IDA signature file for Delphi6 & Delphi7


15-1162476114
Ekzot
2006-11-02 17:01
2006.11.19
Что за железка глючит.


2-1162226881
Evo
2006-10-30 19:48
2006.11.19
как убрать ошибку


2-1162383897
Сергей И
2006-11-01 15:24
2006.11.19
Помогите с вопросом Ini файлов!





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