Главная страница
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.035 c
3-1158307102
Guest001
2006-09-15 11:58
2006.11.19
Exception в Firebird не ловится в Delphi - почему?


15-1162075852
Petr V.Abramov
2006-10-29 02:50
2006.11.19
и че народ на стеки потянуло последние дни...


2-1162433136
viper03
2006-11-02 05:05
2006.11.19
помогите с sql


1-1160554311
kyn66
2006-10-11 12:11
2006.11.19
Сохранение экрана в PNG


15-1162042337
Владимир_мпп
2006-10-28 17:32
2006.11.19
Альтернативный WINS-Сервер