Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрый вывод графики на канву [D7]


Пробегалец ©   (2010-05-04 11:33:00) 

Доброе время суток.
Храню графику в двухмерном массиве (попиксельно. Этакий аналог битовой карты). Необходимо организовать быстрый вывод этой самой графики на канву.
Canvas.pixels[] - долго.
bitmap.scanline - дорого по памяти.
Единственная мысля организовать прорисовку через хендл канвы, как это делает gdi32. Но как это сделать не очень представляю.
Да и привязку отрисовки нельзя цеплять на чистый winapi, так как в будущем планируется портирование кода под freepascal.

Будут какие предложения?


Пробегалец   (2010-05-05 16:28:00) [1]


> Anatoly Podgoretsky ©   (04.05.10 13:31) [14]
> > Пробегалец  (04.05.2010 13:11:13)  [13]Просто не применимы.
>

А для растеризации кривых пойдет? :)


Пробегалец   (2010-05-05 16:26:00) [2]


> Перегонять в tbitmap и выводить.А все трудноусваяемые операции
> выполнять в таких вот "массивах", при непоследовательном
> доступе (да даже и при последовательном) скорость будет
> всяко выше сканлайна. Минус - гемор с выводом.


Да похоже так и придется делать. Вроде не так медленно, как могло бы. И по памяти вроде ничо.


> Под какие платформы? NIX/MAC?


возможно и то, и то. Нужно будет там пощупать, как битмап пашет


antonn   (2010-05-04 22:19:00) [3]


> Дублировать с буфером-массивом? а если большой объем данных
> и нужно быстро выводить?

Перегонять в tbitmap и выводить.
А все трудноусваяемые операции выполнять в таких вот "массивах", при непоследовательном доступе (да даже и при последовательном) скорость будет всяко выше сканлайна. Минус - гемор с выводом.

Либо тупо указателем на данным битмапа, тоже вполне быстро будет, геморр будет с форматом битмапа и немножко с перевернутыми строками.


Б   (2010-05-04 17:34:00) [4]


> Пробегалец   (04.05.10 13:10) [12]
> дополняю: так как это делает winapi.


А TBitmap не на WinAPI держится?
Взгляни его исходы и убедишься...

> так как в будущем планируется портирование кода под freepascal.

Под какие платформы? NIX/MAC?
Юзать API нужной платформы всё же придёться.

> Храню графику в двухмерном массиве

Можно выводить как DIB функцией SetDIBitsToDevice прямо на DC.
Он же канва.


Anatoly Podgoretsky   (2010-05-04 13:31:00) [5]

> Пробегалец  (04.05.2010 13:11:13)  [13]

Просто не применимы.


Пробегалец   (2010-05-04 13:11:00) [6]


> алгоритмs Брезенхема не применимы для попиксельного вывода
> графики.

Поясните если не сложно


Пробегалец   (2010-05-04 13:10:00) [7]


> > мысля организовать прорисовку через хендл канвы

дополняю: так как это делаетwinapi.

Я немного ковырял исходники gdi32 от reactos и там к хендлу присваивается какаета структура, но пока я не понял что там к чему. Мало того что, там куча перекресных ссылок в разные модули, так и еще на С++. А я с ним не очень


Anatoly Podgoretsky   (2010-05-04 13:07:00) [8]


> Хочу повозиться с алгоритмами Брезенхема и иже с ними

алгоритмs Брезенхема не применимы для попиксельного вывода графики.


Алексей 123   (2010-05-04 12:53:00) [9]

Сейчас вчитался.

> мысля организовать прорисовку через хендл канвы
> привязку отрисовки нельзя цеплять на чистый winapi

ты уж определись


Алексей 123   (2010-05-04 12:49:00) [10]

StretchDIBits юзай.

Немножко другое, но поможет:
http://delphi.about.com/library/bluc/text/uc052501e.htm


brother   (2010-05-04 12:42:00) [11]

> Считаю нецелесообразно

тогда - это твой велосипед? тебе его и делать ;)


Пробегалец   (2010-05-04 12:29:00) [12]


> > Пробую силы в создание собственной граф. библиотечки.
> > Будут какие предложения?а нам велосипедов не нать!


Мне нать ;)


> > А писать очередной ретранслятор gdi нет хочу.
> ?


Хочу повозиться с алгоритмами Брезенхема и иже с ними


> > bitmap.scanline - дорого по памяти.
обоснование?


Ну щитаем, большой двумерный массив допустим с четырехбайтовой ячейкой и чисто для отрисовки создавать аналогичный по размеру битмап,  копировать в цикле туда все данные.... а если картинка в массиве меняется динамично? и тд и тп. Считаю нецелесообразно


brother   (2010-05-04 11:57:00) [13]

> Пробую силы в создание собственной граф. библиотечки.


> Будут какие предложения?

а нам велосипедов не нать!

> А писать очередной ретранслятор gdi нет хочу.

?

> bitmap.scanline - дорого по памяти.

обоснование?


Пробегалец   (2010-05-04 11:56:00) [14]


> перегоняй в bitmap формат и рисуй...


Дублировать с буфером-массивом? а если большой объем данных и нужно быстро выводить?


Пробегалец   (2010-05-04 11:55:00) [15]


> Anatoly Podgoretsky ©   (04.05.10 11:48) [2]
> > Andy BitOff  (04.05.2010 11:43:01)
> [1]Как все не интересно.
>


Действительно не интересно. Пробую силы в создание собственной граф. библиотечки. А писать очередной ретранслятор gdi нет хочу.


brother   (2010-05-04 11:54:00) [16]

перегоняй в bitmap формат и рисуй...


Anatoly Podgoretsky   (2010-05-04 11:48:00) [17]

> Andy BitOff  (04.05.2010 11:43:01)  [1]

Как все не интересно.


Andy BitOff   (2010-05-04 11:43:00) [18]


> Будут какие предложения?

Не заниматься ерундой.
Хранить графику, как хранят графику.


Наверх

Титульная страница Поиск, карта сайта Написать письмо