Главная страница
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.51 MB
Время: 0.046 c
15-1274332956
Медвежонок Пятачок
2010-05-20 09:22
2010.08.27
Пример как не надо программаровать


2-1265475416
Алексей2010
2010-02-06 19:56
2010.08.27
Не уничтожается класс с 0 индексом


2-1268463646
serhiyiv
2010-03-13 10:00
2010.08.27
PNG PNG


15-1271364443
pokey
2010-04-16 00:47
2010.08.27
Регистрация в QIWI


2-1272982597
novichek
2010-05-04 18:16
2010.08.27
TCPserver