Главная страница
    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.072 c
1-1159865750
Sham
2006-10-03 12:55
2006.11.19
Проблема с типами данных


1-1160321075
flaxe
2006-10-08 19:24
2006.11.19
Встраивание в другие программы


15-1161935751
Rule
2006-10-27 11:55
2006.11.19
Разбирается ли кто в синтезаторах ... не могу выбрать между двух


2-1162556275
NewUser0
2006-11-03 15:17
2006.11.19
Список запушенных приложений


2-1162395129
7D7
2006-11-01 18:32
2006.11.19
я непомню как это делается))





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