Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Быстрый вывод графики на канву   Найти похожие ветки 

 
Пробегалец   (2010-05-04 11:33) [0]

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

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


 
Andy BitOff ©   (2010-05-04 11:43) [1]


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

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


 
Anatoly Podgoretsky ©   (2010-05-04 11:48) [2]

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

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


 
brother ©   (2010-05-04 11:54) [3]

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


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


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


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


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


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


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


 
brother ©   (2010-05-04 11:57) [6]

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


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

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

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

?

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

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


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


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


Мне нать ;)


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


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


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


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


 
brother ©   (2010-05-04 12:42) [8]

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

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


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

StretchDIBits юзай.

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


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

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

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

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


 
Anatoly Podgoretsky ©   (2010-05-04 13:07) [11]


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

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


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


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

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

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


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


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

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


 
Anatoly Podgoretsky ©   (2010-05-04 13:31) [14]

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

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


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


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


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

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

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

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

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


 
antonn ©   (2010-05-04 22:19) [16]


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

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

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


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


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


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


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.061 c
15-1275628520
12
2010-06-04 09:15
2010.08.27
MSSQL2005, Что за прикол с датами..


4-1237968794
Новичок
2009-03-25 11:13
2010.08.27
Зависание меню после установки хука


15-1266979814
brother
2010-02-24 05:50
2010.08.27
IPv6


2-1270652923
Vincero
2010-04-07 19:08
2010.08.27
Отловить состояние клавиши [Shift] при нажатии на пункт PopupMenu


6-1219479860
Rembo
2008-08-23 12:24
2010.08.27
winsock2 клиент сервер connect 10035





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский