Главная страница
    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
2-1392372907
санек
2014-02-14 14:15
2015.09.10
компонент TdateTime


2-1396806177
Drowsy
2014-04-06 21:42
2015.09.10
В DBGridEh есть колонка навигации (самая левая) .


2-1389243343
SkAndriy
2014-01-09 08:55
2015.09.10
Коррекция уменьшения размеров формы в Windows 7 (64-bit)


15-1413374633
xayam
2014-10-15 16:03
2015.09.10
[Гравитация] Может такое быть?


15-1417300204
Юрий
2014-11-30 01:30
2015.09.10
С днем рождения ! 30 ноября 2014 воскресенье





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