-
Написал простенькую процедурку для конвертинга BMP в GIF. Конвертация происходит, но если исходная картинка truecolor то на выоде картинка получается с покареженной палитрой, видимо лишние цвета тупо отбрасываются для получения стандартных для гифов 256. Вот так выглядит процедура:
procedure GIF_save(btm:TBitmap; path:string); var gif:TGIFImage; begin gif:=TGIFImage.Create; gif.Assign(btm); gif.SaveToFile(path); gif.Free; end;
Как мне ее доработать чтобы в выходной картинке с палитрой все было нормально? Заранее спасибо.
-
Придётся самому приводить к 256 цветам, или использовать сторонние компоненты.
-
А если сторонние то какие?
-
Ээээээ.... А TGIFImage откуда?
Если это Anders Melander's TGIFImage, то надо задать DitherMode, прежде чем присваивать.
-
TGIFImage это именно сторонний компонент Anders Melander версии 2.2. Так что там нужно предварительно сделать?
-
Доработал процедуру:
procedure GIF_save(btm:TBitmap; path:string); var gif:TGIFImage; begin gif:=TGIFImage.Create;
gif.ColorReduction:=rmQuantize; gif.DitherMode:=dmBurkes;
gif.Assign(btm); gif.SaveToFile(path); gif.Free; end;
Методом подбора значений ColorReduction и DitherMode добился удовлетворительно результата, но ACDSee конвертирует качественней. Неужели нельзя добится такого же качества?
-
>но ACDSee конвертирует качественней. Неужели нельзя добится такого же качества?
Надо пошустрить в настройках ACDSee, какой алгоритм они используют.
Вообще, про dmBurkes автор пишет: Maps colors using Burkes Error Diffusion dihthering. Slightly slower than Floyd Steinberg, but faster than Stucki. Good for monochrome dithering.
Может лучше dmFloydSteinberg?
-
... это не ответ, а реанимация вопроса ... использую и
gif.ColorReduction := rmQuantize;
gif.DitherMode := dmFloydSteinberg;
и другие - получается слабое подобие оригинала - может такой ТGIFImage// использую конечно не фонтан - "Version: 2.2" , но ничего более "нового" найти не смог ... При использовании RxGIFAnimator получается вроде лучше, но все равно не то ... Так есть ли решение для ГИФа (не анимэ), или его можно использовать только для ВЭБа (8 бит)? ...
-
FloydSteinberg у TGifImage кривоват. Заметно, если сделать картинку монохромной (ко всем ссылкам добавить http://). GifImage: ipicture.ru/Gallery/Viewfull/3392969.html Нормальный (надеюсь) FS: ipicture.ru/Gallery/Viewfull/3392971.html
Впрочем, на качество картинки в 256 цветах это слабо влияет, главное - правильный подбор палитры, дизеринг только пытается сгладить переходы между цветами при заданной палитре. А что касается подбора - сам не знаю идеального решения, во всяком случае, готовых компонентов не могу предложить. Есть альтернативный метод расчёта палитры: downloads.sourceforge.net/tfastdib/FastLIB_v2.5_1999.rar?modtime=1154284445&big_mirror=0 (FastQuant.pas) Даёт чуть более "гладкую" картинку, но имеется тенденция к искажению исходных цветов (белый цвет стал темнее): ipicture.ru/Gallery/Viewfull/3393959.html Расчёт палитры по примеру с efg2.com (который использует GifImage): ipicture.ru/Gallery/Viewfull/3393961.html
или его можно использовать только для ВЭБа (8 бит)?
У GIF макс. 256 цветов (8 бит/пиксель) - ограничение формата, независимо от того, веб или не веб. Используйте PNG.
-
... благодарю, будем копать в сторону PNG, или jpeg-ать (хотя, там тоже при 24b и стандартных решениях результат несколько хромает ...
-
Удалено модератором
|