Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Пробегалец   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.052 c
2-1269343965
F$
2010-03-23 14:32
2010.08.27
установка/сброс бита


10-1167226388
Priest
2006-12-27 16:33
2010.08.27
Собственная реализация IDispatch


2-1267712808
Scot Storch
2010-03-04 17:26
2010.08.27
чтение из стрима


15-1264530887
Rouse_
2010-01-26 21:34
2010.08.27
Вопрос по поводу Дельфи 2009 (и выше)


15-1264627806
Юрий
2010-01-28 00:30
2010.08.27
С днем рождения ! 28 января 2010 четверг





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский