![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Я через цикл меняю каждый пиксель в битмапе размером 3000х3000,
это длиться секунд 40 ![]() на это время приложение не реагирует ![]() как избавиться от этого зависания, чтобы можно было нажать хотя-бы кнопку отмена. |
#2
|
|||
|
|||
![]() Код:
Application.ProcessMessages; |
#3
|
||||
|
||||
![]() На выполнение 9000000 циклов 40 сек? Скорее алгоритм поправить надо, а использование Application.ProcessMessages, хоть и отдаст управление, зато процесс еще более замедлит.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
![]() Вот например два алгоритма делающие одно и то-же, но второй работает в 4 раза быстрее.
Код:
Var x,y: Integer; TickCount: DWord; begin TickCount := GetTickCount; for x := 1 to Form30.Width do for y := 1 to Form30.Height do Form30.Canvas.Pixels[x,y] := Rgb(Random(255),Random(255),Random(255)); ShowMessage(IntToStr(GetTickCount - TickCount)); end; Код:
Var x,y: Integer; Bitmap: TBitmap; TickCount: DWord; begin TickCount := GetTickCount; Bitmap := TBitmap.Create; Bitmap.Width := Form30.Width; Bitmap.Height := Form30.Height; for x := 1 to Form30.Width do for y := 1 to Form30.Height do Bitmap.Canvas.Pixels[x,y] := Rgb(Random(255),Random(255),Random(255)); Form30.Canvas.Draw(0,0,Bitmap); ShowMessage(IntToStr(GetTickCount - TickCount)); end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Цитата:
это самое то что мне нужно. Цитата:
насчет скорости, я теперь использую bitmap.scanline, работает намного быстрее чем bitmap.canvas.pixels |