Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

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

Вопрос: кто нибудь встречал похожие программы написанные на Дельфи? интересно взглянуть на код
Заранее спасибо
36K
23 августа 2011 года
Pcrepair
64 / / 16.01.2011
Вижу, конкретно с кодом будет проблемно - видимо достаточно сложный
тогда обсудим логику работы программы
вариант1
1. открыть файл БМП в каталоге
2. прочитать первый байт массива пикселей (он же последний в файле)
3. перевести в строковую форму значение индекса, записанное в байте
4. открыть новый БМП-файл, записать в него базовый файл, присвоить ему имя взятое из индекса байта пикселя (ну чтобы в имени файла было указание на палитру, не потерялось)
5. сравнить поочередно все пиксели в массиве нового файла со значением первого байта пикселя
если значения равны, тогда сравниваем следующий байт пикселя
если значения не равны, тогда присваиваем байту значение "черный цвет" и идем дальше сравнивать
6. сохраняем на ЖД в том же каталоге с именем к примеру 236.bmp (где 236 - строковое значение индекса байта пикселя)
7. читаем 2-й байт первого файла, зацикливаем это действие, пока не закончатся цвета в палитре
итого имеем на ЖД:
начальный файл
файлы с именем индекса палитры 2-х цветовые, цвет фона черный, и цвет палитры
Получается много много вычислений, вопросы:
- можно приблизительно оценить время выполнения операции при условии что цветов в палитре скажем 150? массив размером 1280х1024 пикс, ну РС = INTEL I5 или 7? что там последнее
- может еще какая логика обработки есть?
10
23 августа 2011 года
Freeman
3.2K / / 06.03.2004
В модуле Graphics есть функция CreateMappedBmp, которой достаточно передать матрицу старых и новых цветов. Всем цветам, кроме нужного, поставить цвет фона, -- и вуаля!

Преобразование bitmap-ов займёт меньше секунды (всех), запись на диск -- в зависимости от оборудования.
36K
24 августа 2011 года
Pcrepair
64 / / 16.01.2011
вот есть такой рабочий код
Код:
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;
       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бит с палитрой
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог