![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Конвертер 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);
не судьба ?