Delphi - рисование ( Image>Paintbox>dxpaintbox>dxdraw )

M

Mulder

Так ВРОДЕ пошло. Сначало в памяти потом методом Bitbtl ( спасибо, нормально работает ) на paintbox вывожу нужный кусок. Моргание убралось после перестановки койкакого кода местами, головой думать надо. Ну посмотрим что будет дальше. А как вообще память расходуеться при таком методе, не слишком?
 

xaxulin

Местный
Регистрация
24 Янв 2004
Сообщения
17
Реакции
18
Credits
30
Убери из отрисовки:
- strtoint(), лучше держи в памяти готовый массив INT-ЗНАЧЕНИЙ;
- сравнение с текстовой строкой 'AB'
- TextWidth - тоже не самая быстрая функция.
Удачи!
 
M

Mulder

Оператор IF вроде сам по себе медленный, только чем его заменишь.
 
Последнее редактирование модератором:

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Если mastexx_area - трёхмерный массив, то работать надо только с последним измерением: TmpArr := mastexx_area[x2, y2];

Хранить координаты в виде строк действительно нехорошо.

bmp_drawtexx.Canvas можно оптимизировать с использованием with.

Примерно так получится:
Код:
with bmp_drawtexx.Canvas do begin
  if mastexx_param[global_x, global_y,6]='AB' then begin
    TmpArr := mastexx_area[x2, y2];
    TextOut(TmpArr[0] + (TmpArr[2] div 2 - TextWidth(mastexx_text[x2,y2]) div 2),
   TmpArr[1], mastexx_text[x2,y2] );
  end;
end;

Наверняка можно ещё что-нибудь оптимизировать.
 

xaxulin

Местный
Регистрация
24 Янв 2004
Сообщения
17
Реакции
18
Credits
30
Дело не в операторе IF...
Будет быстрее, если данные держать не в текстовых строках а сразу в int значениях.
 
M

Mulder

Попробуем обязательно, просто на все время не хватает. Может завтра.
 
M

Mulder

Ведь от with не большая польза, хотя конечно правильно надо все оптимизировать, буду теперь юзать его.
С ходу не понял что это такое TmpArr := mastexx_area[x2, y2];
А вот чего у меня был mastexx_area в string хотя я храню в нем int не понятно и мне, но уже все перевел.
 
Последнее редактирование модератором:

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Я думал (может, и не верно) что mastexx_area - трёхмерный динамический массив, например, array of array of array of integer.
Тогда TmpArr := mastexx_area[x2, y2] (где TmpArr - одномерный динамический массив, например, array of integer) понижает размерность до 1, что даёт неплохой прирост скорости за счёт исключения последующего дублирования достаточно сложного кода доступа к элементу трёхмерного массива (TmpArr[z] вместо mastexx_area[x2, y2, z]).
 
M

Mulder

mastexx_area - трёхмерный НЕдинамический массив. Пока я не роботал с динамическим, че то не получилось. А ка юзать этот TmpArr, что будет в переменных на него записано?
 
M

Mulder

Ладно, ВСЕМ СПАСИБО, благодаря вашей помощи дело сдвинулось, надеюсь и в дальнейшем пойдет. ТЕМУ МОЖНО ЗАКРЫВАТЬ.