Paleta kolorów

0

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.

0

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.

0

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?

0
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

0

dzieki, powinno wystarczyc.

szukalem informacje o najlepszym algorytmie i znalazlem to:
GIF.ColorReduction := rmQuantizeWindows;
GIF.DitherMode := dmFloydSteinberg;
wystarcza 2 linijki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1