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;