0 / 0 / 3
Регистрация: 06.01.2011
Сообщений: 183

Конвертация BMP 8bit файла в отдельные цветовые файлы

22.08.2011, 16:22. Показов 2417. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Нужна программа со следующими возможностями:
- открыть файл BMP 8bit 1600х1200 пик
- определить число используемых цветов в палитре
- сделать из открытого файла, графические файлы BMP 8bit в которых присутствует только один цвет из палитры, все остальные заменены на черный. в общем из одного многоцветного файла сделать много одноцветных, по числу цветов в палитре исходного файла
- записать полученные файлы на ЖД, в том же каталоге, для последующего просмотра

Вопрос: кто нибудь встречал похожие программы написанные на Дельфи? интересно взглянуть на код
Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2011, 16:22
Ответы с готовыми решениями:

Как получить цвет пикселя из палитры BMP 8bit
Добрый день! Нужна помощь в разработке кода процедуры как известно, в BMP 8bit файле на пиксель приходиться байт, в котором хранится...

Конвертация bmp изображения в матрицу
StreamWriter steamWriter = new StreamWriter("c:\1.txt"); for (int y = 0; y < bmp.Height; y++) { for (int x = 0; x <...

Конвертация BMP в массив и обратно
Добрый день. Есть проблема с конвертацией Ч/Б bmp изображения в массив и обратным получением изображения из массива. Код создания...

4
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
22.08.2011, 17:36
Через WinAPI можно получить всё тело bitmap'а. Учитывая, что он 8bit, каждый байт в теле будет соответствовать одному пикселу. Палитру тоже можно получить без проблем. Но пальтра у него в любом случае будет состоять из 256 цветов. Какие из них используются, а какие нет - это только анализом всех пикселов можно выяснить.
0
0 / 0 / 3
Регистрация: 06.01.2011
Сообщений: 183
23.08.2011, 08:44  [ТС]
Вижу, конкретно с кодом будет проблемно - видимо достаточно сложный
тогда обсудим логику работы программы
вариант1
1. открыть файл БМП в каталоге
2. прочитать первый байт массива пикселей (он же последний в файле)
3. перевести в строковую форму значение индекса, записанное в байте
4. открыть новый БМП-файл, записать в него базовый файл, присвоить ему имя взятое из индекса байта пикселя (ну чтобы в имени файла было указание на палитру, не потерялось)
5. сравнить поочередно все пиксели в массиве нового файла со значением первого байта пикселя
если значения равны, тогда сравниваем следующий байт пикселя
если значения не равны, тогда присваиваем байту значение "черный цвет" и идем дальше сравнивать
6. сохраняем на ЖД в том же каталоге с именем к примеру 236.bmp (где 236 - строковое значение индекса байта пикселя)
7. читаем 2-й байт первого файла, зацикливаем это действие, пока не закончатся цвета в палитре
итого имеем на ЖД:
начальный файл
файлы с именем индекса палитры 2-х цветовые, цвет фона черный, и цвет палитры
Получается много много вычислений, вопросы:
- можно приблизительно оценить время выполнения операции при условии что цветов в палитре скажем 150? массив размером 1280х1024 пикс, ну РС = INTEL I5 или 7? что там последнее
- может еще какая логика обработки есть?
0
3592 / 2507 / 567
Регистрация: 11.09.2009
Сообщений: 9,079
23.08.2011, 21:54
Цитата Сообщение от Pcrepair Посмотреть сообщение
Получается много много вычислений
"Много-много вычислений" - это, например, при рассчёте напряжённости электромагнитного поля в ближней зоне антенны. При вашем вычислении вы, пожалуй, задержку "на глаз" и не заметите.
0
0 / 0 / 3
Регистрация: 06.01.2011
Сообщений: 183
24.08.2011, 08:31  [ТС]
вот есть такой рабочий код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.Button1Click(Sender: TObject);
type
     TPalette = record
       Version: Word;
       NumEntries: Word;
       PalEntry: array [byte] of TPaletteEntry;
     end;
   var
     b,t: TBitmap;
     pal,tpal: TPalette;
     x,y,i: integer;
     max: byte;
     src,dst: pByteArray;
   begin
     b:=TBitmap.Create;
     b.LoadFromFile('test.bmp');
     GetPaletteEntries(b.Palette, 0, 256, pal.PalEntry);
     max:=0;
     for y:=0 to b.Height-1 do begin
       src:=b.ScanLine[y];
       for x:=0 to b.Width-1 do
         if src[x]>max then max:=src[x];
     end;
     t:=TBitmap.Create;
     t.Assign(b);
     tpal.Version:=$0300;
     tpal.NumEntries:=2;
     for i:=0 to max do begin
       tpal.PalEntry[0]:=pal.PalEntry[i];
       pDWORD(@tpal.PalEntry[1])^:=0;
       t.Palette:=CreatePalette(pLogPalette(@tpal)^);
       for y:=0 to t.Height-1 do begin
         src:=b.ScanLine[y];
         dst:=t.ScanLine[y];
         for x:=0 to t.Width-1 do dst[x]:=ord(src[x]<>i);
       end;
       t.SaveToFile(IntToHex(i, 2)+'.bmp');
     end;
     t.Free;
     b.Free;
   end;
как бы там прикрутить pf1bit? сейчас преобразовывается в 8бит с палитрой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.08.2011, 08:31
Помогаю со студенческими работами здесь

Конвертация картинки из 24bit в 8bit
Здравствуйте. Нужно написать программу для конвертации изображение из 24bit в 8bit. Подскажите в каком направление двигаться, или какой...

Конвертация *.BMP в 3 файла *.ТХТ
Народ помогите. Нужен код на VB для конвертации файла формата BMP, ну то бишь изображения, в три файла формата ТХТ - RED.тхт, GREEN.тхт...

Конвертация bmp-файла в jpg
Все привет!!! Как с помощью WinApi файл .bmp преобразовать в файл .jpg?

Работа с файлами. Из имеющего файла по сортировать в отдельные файлы
Доброго времени суток Ув., сайберчани. Прошу помочь, а лучше наставить на путь как решить эту проблему. Нужно из имеющего файла в котором...

Конвертация из bmp в png
Всем здравствуйте.:senor: Возник вопрос по поводу использования библиотек gdiplus.h. В MSDN есть готовый код который позволяет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Сложность Колмогорова: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Mr. Docker 20.03.2025
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную. . .
C++26: Индексирование пакетов и метапрограммиро­вание
bytestream 20.03.2025
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
Состояние гонки в C#: подводные камни многопоточного программировани­я
UnmanagedCoder 20.03.2025
Что такое состояние гонки? Это ситуация, когда результат программы непредсказуемо меняется в зависимости от порядка выполнения потоков. Проще говоря, два или более потока пытаются одновременно. . .
Next.js для разработки React: преимущества серверного рендеринга
Reangularity 20.03.2025
Next. js решает классическую проблему React-приложений: медленную первоначальную загрузку и плохую индексацию поисковиками. Вместо того чтобы заставлять браузер пользователя выполнять всю работу по. . .
JUnit или TestNG: Выбираем Java-фреймворк для тестирования
Javaican 20.03.2025
История тестовых фреймворков в Java началась в конце 90-х, когда Кент Бек и Эрих Гамма разработали JUnit - инструмент, который перевернул представление разработчиков о модульном тестировании. JUnit. . .
Разбиваем монолит на два микросервиса и реализуем CI/CD
ArchitectMsa 20.03.2025
Когда команда растет, а функциональность монолита расширяется, поддерживать и развивать такую систему становится все труднее. Разработчики начинают тратить много времени на разбор сложных. . .
Python и PDF: Создание и редактирование файлов
py-thonny 20.03.2025
Работа с PDF-документами – одна из популярных задач в современной разработке. Python предлагает несколько инструментов для создания, чтения и редактирования PDF-файлов, среди которых особенно. . .
Корутины в Unity и производительно­сть WaitForSeconds
GameUnited 20.03.2025
Разработчики игр на Unity часто сталкиваются с вопросом: как выполнять действия через определённые промежутки времени, не блокируя основной поток игры? Тут как раз и приходят на помощь корутины —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru