Это не сложно перевести из одного формата в другой, можно даже сохранить в формате indexed color...
... поэтому приходиться пользовать совершеными алгоритмами вроде median и octree algorithm...
Да? Тогда я не понимаю какие у Вас сложности...
Вот готовый модуль (Вы сами мне эту ссылку дали) с реализацией алгоритма Median Cut на Delphi.
Ссылка скрыта от гостей
Всего лишь осталось реализовать 5 процедур:
1. OpenGrafFile('BILD.TGA'); - загрузка файла исходного формата
2. GetGrafPixel( X,Y,R,G,B ); - получение значений R,G,B в координатах X,Y из исходной полноцветной картинки
3. PutPixel(X,Y,Lookup^[Convert24to15( R,G,B )]); - положить индекс новой сжатой палитры в пиксель с координатами X,Y в картинку выходного формата.
4. CloseGraph; - запись заголовка, палитры и матрицы пикселей в файл (в соответствии с правилами выходного формата)
5. CloseGrafFile; - закрытие файлов, освобождение памяти.
Но по-моему Вы все же ошибаетесь. Это как раз самое главное - уметь работать с форматами (входным и выходным). Читать, скажем из TGA файла, записывать в формате к примеру PNG. Понимаете о чем я?
В общем, Вот мой совет. Обратите внимание на библиотеку
FreeImage. Живет тут
Ссылка скрыта от гостей
.
Там нет прямой подержки алгоритма
Median Cut, зато, в числе прочих, есть более продвинутый (на мой взгляд)
NeuQuant.
Почитать про него можно тут
Ссылка скрыта от гостей
Там есть и сравнительные характеристики
NeuQuant с
Median Cut.
Если же Вам таки нужен имеенно
Median Cut, то процедуры (1) (2) (3) (4) (5) о которых я выше написал, с помошью
FreeImage Вы легко сможете реализовать через методы класса
TFreeBitmap из этой библиотеки.
PS
Признаюсь... с C# я погорячился... почитал код (на который Вы указали). Там несколько специфических фремворковских классов, реализацию (портироавние в Delphi) которых мне с наскоку не осилить...