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

Вниз

Тормозит отрисовка на 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.054 c
10-1125325670
KSergey
2005-08-29 18:27
2006.11.19
COM+ disable/enable


2-1162486053
kolj
2006-11-02 19:47
2006.11.19
реестр windows xp


2-1162398499
vain
2006-11-01 19:28
2006.11.19
Перерисовка (Repaint и др.)


3-1158651489
term1t
2006-09-19 11:38
2006.11.19
Comand is missing required clause


1-1160221931
AlexeyT
2006-10-07 15:52
2006.11.19
Перехватить клавиши в TWebBrowser





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