Все время затрачивается на выполнение этих двух строк кода:
ImageControl1.Canvas.BeginScene;
ImageControl1.Canvas.EndScene;
Вы можете удалить весь код, который работает с растровым изображением, и код, который фактически рисует растровое изображение, и при этом ни одна йотаРазница во время выполнения.Другими словами, узким местом является код сцены, а не битовый код.И я не вижу возможности для вас оптимизировать это.
Мой тестовый код выглядел так:
Stopwatch := TStopwatch.StartNew;
for i:= 1 to 100 do begin
ImageControl1.Canvas.BeginScene;
ImageControl1.Canvas.EndScene;
end;
ShowMessage(IntToStr(Stopwatch.ElapsedMilliseconds));
Это время, равное вашему коду, 1600 мс на моей машине.Если вы удалите вызовы BeginScene
, DrawBitmap
и EndScene
, ваш код будет запущен на моей машине через 3 мс.