![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Добрый день!
Нужна программа со следующими возможностями: - открыть файл BMP 8bit 1600х1200 пик - определить число используемых цветов в палитре - сделать из открытого файла, графические файлы BMP 8bit в которых присутствует только один цвет из палитры, все остальные заменены на черный. в общем из одного многоцветного файла сделать много одноцветных, по числу цветов в палитре исходного файла - записать полученные файлы на ЖД, в том же каталоге, для последующего просмотра Вопрос: кто нибудь встречал похожие программы написанные на Дельфи? интересно взглянуть на код Заранее спасибо --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Вижу, конкретно с кодом будет проблемно - видимо достаточно сложный
тогда обсудим логику работы программы вариант1 1. открыть файл БМП в каталоге 2. прочитать первый байт массива пикселей (он же последний в файле) 3. перевести в строковую форму значение индекса, записанное в байте 4. открыть новый БМП-файл, записать в него базовый файл, присвоить ему имя взятое из индекса байта пикселя (ну чтобы в имени файла было указание на палитру, не потерялось) 5. сравнить поочередно все пиксели в массиве нового файла со значением первого байта пикселя если значения равны, тогда сравниваем следующий байт пикселя если значения не равны, тогда присваиваем байту значение "черный цвет" и идем дальше сравнивать 6. сохраняем на ЖД в том же каталоге с именем к примеру 236.bmp (где 236 - строковое значение индекса байта пикселя) 7. читаем 2-й байт первого файла, зацикливаем это действие, пока не закончатся цвета в палитре итого имеем на ЖД: начальный файл файлы с именем индекса палитры 2-х цветовые, цвет фона черный, и цвет палитры Получается много много вычислений, вопросы: - можно приблизительно оценить время выполнения операции при условии что цветов в палитре скажем 150? массив размером 1280х1024 пикс, ну РС = INTEL I5 или 7? что там последнее - может еще какая логика обработки есть? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Чучмек |
|
||||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Все гораздо проще -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Спасибо за помощь, в конце пришлось немного доработать
иначе только картинка отображалась на ТИмедж1 а самой конвертации не было , и мне больше нравится отображение имени файла в 16-и ричном формате. время преобразования менее сек с учетом записи на ЖД все таки часть картинок почему то черно-цветная (зеленая, красная...) --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Кроме черного на картинке более одного цвета? Интересно... В двухцветной палитре три цвета Дай исходный bmp -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
исходный БМП тут: http://wirelessinternetkrd.narod.ru/test.bmp
на форум не влезло 1.3 мб другие варианты то же кстати так же работают --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Ну и какой кадр там цветной получается?
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
--------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Ну.
Зеленая составляющая на черном фоне. Тебе что надо? Черно-белый? -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Да
белый - вместо зеленого, ли любого другого из палитры черный - фон информация о цвете сохраняется в имени файла и в палитре оставшегося BMP 8bit вот что мне непонятно, ведь палитры в 1Бит файле нет? где информация о цвете сохраняется? далее, функция pf1bit то же такой файл делает (если взять BMP 8bit и пропустить через pf1bit) и еще вопрос: есть HEX-редакторы, там вывод побайтно а нет редакторов с выводом побитно, ну просто для наглядности --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Почему нет? Двухцветная палитра. Если 1 - цвет палитры с номером 1, если 0 - с номером 0. Вот мы ее и описываем. Если надо черно-белый вместо LogPalette^.palPalEntry[1]:=mColorPalette[i] пиши LogPalette^.palPalEntry[1]:=$00FFFFFF; (толлько тогда без if , иначе для черного получишь белое на белом) Или создавай монохромный битмап.
Не , а IntToHex(mIsColor[i], 2). i это только индекс массива используемых цветов (нужен, чтобы не создавать пустых(черных) файлов) Но правильно информацию о цвете выводить как IntToHex(mColorPalette[mIsColor[i]],6) - сам цвет, а не номер в палитре. $F - 1111b $E - 1110b $D - 1101b ит.д. $EF - 11101111 Чего нет - сделай сам. Затем Delphi и нужен(нужна,нужно...). -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |