Главная страница
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.48 MB
Время: 0.039 c
15-1162559111
ArtemESC
2006-11-03 16:05
2006.11.19
Фильм "Остаться в живых"


3-1158810978
Merko2005
2006-09-21 07:56
2006.11.19
Как вычислить кол-во месяцев


1-1160130078
Ш-К
2006-10-06 14:21
2006.11.19
Сохранение MSWord документа в формате HTML


2-1162622226
Shopot
2006-11-04 09:37
2006.11.19
Печать.


15-1162275186
@!!ex
2006-10-31 09:13
2006.11.19
GetTickCount под досом