Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Конвертер BMP 32 bit BGRA в BMP 8 bit c Palette


Pcrepair ©   (2011-08-16 21:00:00) 

Добрый день!
есть следующий вариант преобразования

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form1.Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'\'+'s.bmp');
 Image1.Picture.Bitmap.PixelFormat:= pf8bit;
 Form1.Image1.Picture.Bitmap.SaveToFile(ExtractFilePath(Application.ExeName)+'\'+'s1.bmp');
end;

Все работает, но есть вопросы
1. точно  Image1.Picture.Bitmap.PixelFormat:= pf8bit; преобразует BGRA в Palette, или там какой-то фокус
2. как проверить наличие палитры в S1? может есть у кого код процедуры, вытаскивающий политру из файла? или программа какая это может сделать? чтоб точно знать что палитра ЕСТЬ
3. нет ли у кого альтернативного кода? стандартные решения, как утверждают некоторые, однобоки. если можно, приведите тут пример
Заранее спасибо


Sapersky   (2011-08-17 16:19:00) [1]

Дизеринг (dithering) есть, как уже писали.
http://en.wikipedia.org/wiki/Dither
Но цвета в реализации FastQuant могут несколько искажаться, белый становится сероватым, например.


Pcrepair   (2011-08-17 15:21:00) [2]

похоже TPixelFormat - стандартная процедура конвертации
так и запишем

тем не менее, никто не работал с fastlib?
может оно чем то лучше, типа быстрее конвертирует?


Sapersky   (2011-08-17 15:04:00) [3]

как проверить наличие палитры в S1? может есть у кого код процедуры, вытаскивающий политру из файла? или программа какая это может сделать?

Любой графический вьюер (кроме стандартного? тыщу лет им не пользовался) показывает информацию о картинке в виде ширина*высота*глубина цвета. Если глубина цвета = 8, или иногда пишут 256 цветов - это палитровая картинка. В Irfanview можно и саму палитру посмотреть.

нет ли у кого альтернативного кода

http://www.efg2.com/Lab/Graphics/Colors/ShowDemoOne.htm


antonn   (2011-08-16 22:56:00) [4]


> 3. нет ли у кого альтернативного кода? стандартные решения,
>  как утверждают некоторые, однобоки. если можно, приведите
> тут пример
> Заранее спасибо

речь о дизеринге? тогда посмотреть fastlib, модуль FastQuant.pas


Игорь Шевченко   (2011-08-16 21:59:00) [5]


> есть вопросы


а почитать
procedure TBitmap.SetPixelFormat(Value: TPixelFormat);
не судьба ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо