Einzelnen Beitrag anzeigen

Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Bitmap auf 8bit mittels vorhandener Palette

  Alt 27. Mär 2010, 21:07
Ok Vektorrechnung sollte nicht das Problem sein. Hatte in der Uni erst letztes Semester Lineare Algebra.
Wie mache ich das am besten, sollte ich da dann von Nullvektor aus gehen und dann die differenz der beiden Vektoren ausrechnen? Und kann ich da einfach übers Skalarprodukt gehen?

Mir reicht auf jeden Fall erst mal der RGB Farbraum. Sicherlich wäre es besser über HSL zu gehen, da man dort die Helligkeit einbeziehen kann, aber mir erstmal nicht so wichtig. Werd ich vielleicht als zweite Implementation später hinzufügen. Dann könnte man auch beide vergleichen.
Der L*a*b*-Farbraum hört sich sehr interessant an. Den werd ich zwar hierfür nicht einsetzen, aber ich glaub da werde ich mich auf jeden Fall mal einarbeiten. Für andere Projekte.


Ich hab leider für die nächste Zeit kein Delphi, und mache das alles erstmal theoretisch. Meine erste Überlegung sieht folgendermaßen aus, wie gesagt nicht getestet.
Delphi-Quellcode:
TRGB = record
  r: byte;
  g: byte;
  b: byte;
end;

TPalette = array[0..255] of TRGB;



function Skalar(const aVector: TRGB): integer;
begin
  result := aVector.r * aVector.r
         + aVector.g * aVector.g
         + aVector.b * aVector.b;
end;


function GetNearestColor(const aColor: TRGB): integer;
var
   ind, smallest, diff: integer;
begin
  ind := 0;
  smallest := High(Palette);
  
  for i := 0 to High(Palette) do // Palette mit 256 Einträgen
  begin
    diff := Skalar(aColor) - Skalar(Palette[i]);
    if diff < 0 then diff := diff * (-1);
    
    if diff < smallest then
    begin
      ind := i;
      smallest := diff;
    end;
  end;
  
  result := ind;
end;
Michael N.
Brainstalker
  Mit Zitat antworten Zitat