Wie ktos gdzie znajde przykladowe zrodlo pokazujace jak zmniejszyc palete kolorow, lub uzyc zewnetrzna (Chce zapisac bitmape w formacie GIF), bo tak jak komponent automatycznie zmniejsza do 256 liczbe kolorow jest dalekie od idealu.
Paleta, to po prostu wybór kolorów. Masz tablice 256 kolorów a w niej zapisane składowe rgb (na kazda skladowa przeznaczasz sobie iles tam bitow). Natomiast w bitmapie pixel nie jest opisany bespośrednio za pomoca składowych rgb, tylko indeksu w tablicy kolorów (palecie). Żeby zapisać bitmape w palecie n (256) kolorow musisz na poczatku zaindeksować każdy niepowtarzalny kolor w tablicy, a potem podobne łączyc razem w jeden (stąd straty na jakości), redukujac w ten sposob rozmiar tablicy do n (256) elementów. I tyle.
Paleta, to po prostu wybór kolorów. Masz tablice 256 kolorów a w niej zapisane składowe rgb (na kazda skladowa przeznaczasz sobie iles tam bitow). Natomiast w bitmapie pixel nie jest opisany bespośrednio za pomoca składowych rgb, tylko indeksu w tablicy kolorów (palecie). Żeby zapisać bitmape w palecie n (256) kolorow musisz na poczatku zaindeksować każdy niepowtarzalny kolor w tablicy, a potem podobne łączyc razem w jeden (stąd straty na jakości), redukujac w ten sposob rozmiar tablicy do n (256) elementów. I tyle.
Tylko, ze <ort>na pewno</ort> juz ktos cos takiego napisal, a ja nie wiem nawet jak zadeklarowac palete. Gdzie szukac przykladow?
type paltype=record r,g,b:byte; end;
var
pal:array of paltype;
i,j,k:integer;
r,g,b:byte;
label found;
begin
setlength(pal,0);
for i:=0 to picdx do
for j:=0 to picdy do
begin
getpixel(i,j,r,g,b);
for k:=0 to length(pal)-1 do
if(r=pal[k].r)and(g=pal[k].g)and(b=pal[k].b)then goto found;
k:=length(pal);
setlength(pal,k+1);
pal[k].r:=r;
pal[k].b:=b;
pal[k].g:=g;
found:
end;
writeln('ilosc niezaleznych kolorow : ',length(pal));
// no i pozostaje ci redukcja do 256 sztuk
end.
to tylko schemat, ale pokazuje o co cho.
// nie chce mi sie szukać, ani myślec na redukcja, ale to też nie jest trudne. W każdym razie w grę wchodzi w jakiś sposób posortowanie kolorów
dzieki, powinno wystarczyc.
szukalem informacje o najlepszym algorytmie i znalazlem to:
GIF.ColorReduction := rmQuantizeWindows;
GIF.DitherMode := dmFloydSteinberg;
wystarcza 2 linijki :)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.