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

Вниз

Вертикальный TBitmap.ScanLine   Найти похожие ветки 

 
Димка На   (2012-03-20 17:13) [0]

Как вы поступаете, когда требуется вертикальное преобразование строки?


 
Димка На   (2012-03-20 17:14) [1]

Что написал:)
преобразование битмапа, конечно. Ну или просто сканирование.


 
Сергей М. ©   (2012-03-20 17:26) [2]

Ну если битмап сравнительно мал в объеме данных, то какая разница вертикально или горизонтально ?

Целиком прочитал ScanLine"ом в массив - и ходи себе по массиву как тебе удобно, хоть вертикально хоть конем)


 
Pavia ©   (2012-03-20 18:57) [3]

Если алгоритм сложный, то [x,y] преобразовываю y*LineLength+x*PixelSize

У меня код оптимизирован массивами не использую пользуюсь указателями.
Для перехода к другой строки указатель увеличивается на длину строки в байтах Inc(PByte(p),LineLength).

Для определённых алгоритмов быстрее выполнить транспонирование картинке. Произвести преобразование по строкам и снова транспонировать. Это только для картинок которые в кэш L1 не влазят. Секрет в блочном транспонирование, оно более оптимально использует кэш чем прямой алгоритм. Сам пока код не делал.


 
icWasya ©   (2012-03-21 09:39) [4]

Кстати насчёт кэша.
Делалась некоторая обработка картинки (GrayScale), причём требовалось как раз проходить по вертикальным полосам. Проводились замеры времени обработки. И оказалось, что если картинка имеет ширину в 2048 байт, то времени затрачивается больше, чем когда имеет другую ширину, например 2040.


 
Rouse_ ©   (2012-03-21 19:19) [5]

Данные о изображении находятся сразу за TBitmapInfoHeader, поэтому смысла в использовании ScanLine, что для вертикали, что для горизонтали, нет...


 
Pavia ©   (2012-03-21 19:21) [6]


> Данные о изображении находятся сразу за TBitmapInfoHeader

Не всегда.


 
Rouse_ ©   (2012-03-21 19:26) [7]


> Pavia ©   (21.03.12 19:21) [6]

Ты про сжатие?


 
Pavia ©   (2012-03-21 19:37) [8]

Я про CreateDIBSection.


 
Rouse_ ©   (2012-03-21 22:20) [9]


> Pavia ©   (21.03.12 19:37) [8]
>
> Я про CreateDIBSection.
>

Эмм, я конечно давно с растром не работал, могу и ошибиться, но в чем нюанс? куда данные то денутся??


 
han_malign   (2012-03-22 11:16) [10]


> куда данные то денутся?

- это т.н. Packed DIB(и не забыть еще про палитру и BI_BITFIELDS), который - по большому счету - встречается только при сериализации.
В GDI указатель на буфер растра живет отдельно от заголовка:
1. CreateDIBSection - возвращается функцией - может быть опосредованно задан через hSection + dwOffset(file mapping)
2. GetObject(hDIB, sizeof(DIBSECTION), <DIBSECTION>) - <DIBSECTION>.dsBm.bmBits (и соответственно <DIBSECTION>.dshSection+dsOffset)
3. GetDIBBits - копия...

Другое дело, что ScanLine - возвращает указатель в этот буфер, только нужно угадать где начало - ScanLine[0], или ScanLine[Height-1] - в зависмости от ориентации растра(знак DIBSECTION.dsBmр.biHeight).


 
Rouse_ ©   (2012-03-22 11:27) [11]

Ну так я про нюансы по поводу сжатия и спрашивал :) Это-то я в курсе :)



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

Форум: "Основная";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.047 c
15-1418231693
Rouse_
2014-12-10 20:14
2015.09.10
Троичная логика и математика (триты, трайты и прочая нечисть :)


15-1413787824
Дмитрий С
2014-10-20 10:50
2015.09.10
Посоветуйте, пожалуйста, редактор для sqlite баз.


15-1422221404
Юрий
2015-01-26 00:30
2015.09.10
С днем рождения ! 26 января 2015 понедельник


2-1392732185
Alex_C
2014-02-18 18:03
2015.09.10
Событие OnPaint для компонентов


2-1393935798
leshka
2014-03-04 16:23
2015.09.10
Создание TCheckBox





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