Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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



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

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

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

Цитата:
Сообщение от 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 Кб, 5 просмотров)
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить 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оздание и обсуждение игр 8 29.04.2007 07:12




04:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru