Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2016, 18:12   #1
Khomtchenko
Новичок
Джуниор
 
Регистрация: 24.12.2016
Сообщений: 1
По умолчанию Как работать с графикой не через Canvas? Она тормозная

Везде пишут как работать с графикой через Канвас. Но блин он тормозной. Я создаю объекты при помощи Pixels чтобы они передвигались и перерисовывались. но скорость как на ZX SPectrum. Неужели нельзя как-то как в старом добром Паскале рисовать? Кто что посоветует? А то мерцает все... тормозит
Khomtchenko вне форума Ответить с цитированием
Старый 24.12.2016, 21:58   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Я создаю объекты при помощи Pixels
Это основная ошибка. Используйте Line, Poligons, Draw.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 24.12.2016, 23:23   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Khomtchenko Посмотреть сообщение
но скорость как на ZX SPectrum. Неужели нельзя как-то как в старом добром Паскале рисовать? Кто что посоветует? А то мерцает все... тормозит
Всё также как и в старом добром паскале.
Что-бы не мерцало надо задействовать 2 буферизацию.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 DoubleBuffered:=True;
end;
В паскале GetPixel и SetPixel точно также тормозили, и что-бы не тормозили использовали прямой доступ к видео памяти. Тут тоже используем прямой доступ только не к видео памяти, а к картинке через ScanLine.

Но вообще графика это погоня за производительностью.

Сделал небольшой тест получил вот такие цифры
Код:
66 000 - Bitmap.Pixel[x,y] 
    160 - lazyBitmap.GetPixel(x,y);
      31 - Bitmap.ScanLine[y]
Разница между стандартным и моим пикселем в 300-400 раз, а ScanLine ещё в 5-7 раз быстрее.

Если производительность ScanLine не устраивает переходим на библиоеки и фремворки такие как OpenGL или Graphics32. Они дадут прирост ещё в 10-100 раз.
Вложения
Тип файла: rar LazyBitmap.rar (185.8 Кб, 14 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить CopyPNG (внутри), чтобы она соответствовала Canvas.CopyRect? alextrof94 Общие вопросы Delphi 3 17.04.2013 03:58
статья - Как работать с графикой на канве в среде Дельфи Pblog Обсуждение статей 0 23.06.2010 05:13
статья - Как работать с графикой на канве в среде Дельфи. Урок 1–2 Pblog Обсуждение статей 0 23.06.2010 05:13
Обьясните как работать с графикой и как решыть задачу Alex_Fort Помощь студентам 6 12.06.2009 00:05
Как работать с графикой? Yogurt Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 29.04.2007 07:12