Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Алгоритм выделения объектов из BMP 1bit файла


Автор: Pcrepair 29.8.2011, 19:37
Добрый день!
Вопросы к программистам, хорошо знающим работу с графикой
Исходные данные:
- есть test1.bmp (1bit, черный цвет -фон, белый цвет - значащий)
- размеры файла 1280х1024 пик (скрин экрана дисплея)
- в изображении есть символы и геометрические фигуры
Задача:
- сгенерировать BMP 1bit файлы 1280х1024 пик из исходного test1.bmp, в количестве равном общему числу символов и фигур в исходном файле
- в каждом новом файле должна быть только один символ или фигура, остальным присвоен цвет = черный
- фигурой или символом считать совокупность пикселей имеющих между собой контакт
- каждый новый файл должен иметь свое имя (координаты первого пикселя символа или фигуры - верхний левый, типа 23-57.bmp) и быть записн на ЖД в том же каталоге

Хотелось бы обсудить, с теми кто знает, алгоритмы работы такой программы
если есть примеры кода на ДЕЛФИ, хорошо бы взглянуть

Заранее спасибо всем!

Автор: VictorTsaregorodtsev 29.8.2011, 20:35
Это не задача на графику, а задача на владение языком (или библиотекой VCL) и алгоритмами.

Если разрешено пользоваться классами из VCL - то можно не заморачиваться с побитовыми операциями (можно поставить TBitmap.PixelFormat=pf32bit и получить возможность работать с байтовой кодировкой цвета, когда цвету будет соответствовать не бит, а байт или четырехбайтовое целое - в общем, смотря как потом условие писать). И финальные битмапы можно создавать в памяти как многоцветные (чтобы не париться с битовыми операциями), а перед записью в файл менять им формат на однобитовый.

Ну а поиск фигур - это придётся писать вручную. Я в текущем проекте написал подобное без проблем (мне надо было удалять с картинки "кляксы", чей размер меньше заданного числа пикселов, а крупные кляксы-фигуры оставлять). 

Могу написать за денежку. Но я, правда, работаю с С++ Билдером, поэтому трансляция сишного кода в паскаль у меня затянется (и денежку я запрошу за суммарное время написания-отладки кода на С++ и последующий перевод кода на паскаль, с которым давно не работал). Билдер включает в себя дельфийский компилятор с паскаля, поэтому пас-код будет транслироваться без ошибок, я это проверю ;)

Автор: Pcrepair 29.8.2011, 20:55
классы не нужны, вся программа - форма с кнопкой, при нажатии
- кушает тестовый файл в том же каталоге
- генерирует файлы с символами и записывает их на диск
- ждет следующего нажатия на кнопку

это тестовая программа - кусочек,  для определения всего алгоритма обработки, там еще много чего будет 

Автор: VictorTsaregorodtsev 30.8.2011, 15:27
Цитата(Pcrepair @  29.8.2011,  20:55 Найти цитируемый пост)
классы не нужны

Я не про то. Либо можно задействовать TBitmap (т.е. высокоуровневые возможности чтения картинки из файла и записи её в файл, возможности доступа к строкам пикселов через ScanLine,...) - либо все перечисленные в скобках вещи надо будет писать на чистом паскакале.

ЗЫ. Всё, больше не буду возвращаться в тему (в прошлом письме написал, что я сишник). Кому что надо - в личку или в мыло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)