Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2014, 00:54   #1
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию Обрезание изображения

Здравствуйте!
Есть белый холст 4000 x 4000 (bitmap)
В центре холста рисуется изображение (разного размера).

Требуется обрезать, лишний белый фон по бокам нарисованного изображения в центре.

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

Довольно медленный способ.
Посоветуйте, может есть более рациональный способ?
По идее, зная что размер холста всегда 4000 x 4000 - можно проверять сразу всю строку и весь столбец, но что-то не нашел как.
ZBEP вне форума Ответить с цитированием
Старый 04.10.2014, 01:29   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
сразу всю строку
Код:
TBitmap.ScanLine[Row: Integer]: Pointer;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.10.2014, 02:17   #3
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

min@y™, Спасибо, про ScanLine знаю, но вот для столбцов - нет ScanCol, а без него толку мало из-за того, что для определения левой и правой границы все-равно требуется циклом попиксельно проверять оставшееся пространство..

Последний раз редактировалось ZBEP; 04.10.2014 в 02:20.
ZBEP вне форума Ответить с цитированием
Старый 04.10.2014, 03:17   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от ZBEP Посмотреть сообщение
min@y™, Спасибо, про ScanLine знаю, но вот для столбцов - нет ScanCol, а без него толку мало из-за того, что для определения левой и правой границы все-равно требуется циклом попиксельно проверять оставшееся пространство..
А даже если б был ScanCol чтобы это изменило?

Цитата:
можно проверять сразу всю строку и весь столбец, но что-то не нашел как
Если никто до вас не написал такую процедуру, значит придётся её писать вам самому. Особенно учитывая что ни столбцов, ни строк в данном случае физически нет. Только логически.
northener вне форума Ответить с цитированием
Старый 04.10.2014, 05:03   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вы бинарный поиск задействовали, чтобы не по всем столбцам пробегать?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 04.10.2014, 06:42   #6
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

BDA, да я думал можно сделать что-то вроде такого
Код:
for i:=1 to 4000 do
if Bmp.ScanLine[0]<>Bmp.ScanLine[i] then
...
Но нет.
Видимо сглупил.

В общем подскажите пожалуйста, в какую сторону копать, что бы ускорить процесс определения границ рисунка.
ZBEP вне форума Ответить с цитированием
Старый 04.10.2014, 09:03   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

если рисунок точно центре то и начал бы поиски из центра.
если геометрия рисунка квадрат то можно можно найти сначала правую левую грани (Xl,Xr) потом по найденой грани пробежаться и найти Yt,Yb
а можно и не тупо бежать по грани а каким нибудь алгоритмом типа золотого сечения
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 04.10.2014, 11:44   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Раз и два
phomm вне форума Ответить с цитированием
Старый 05.10.2014, 03:21   #9
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Сделал через Scanline, стало ощутимо быстрее.
Всем спасибо
ZBEP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот, масштабирование, обрезание изображения. CuTTeR Мультимедиа в Delphi 9 12.08.2012 17:48
Обрезание Аудиофайла Den7656 Общие вопросы Delphi 1 15.12.2011 10:58
Обрезание Аудиофайла Den7656 Компоненты Delphi 0 14.12.2011 18:40
Обрезание изображения russian-stalker HTML и CSS 3 26.02.2011 07:53
Обрезание строки dedyshka HTML и CSS 6 26.03.2010 13:52