Delphi-Quellcode:
procedure TForm1.Button22Click(Sender: TObject);
var hoch, breit,i: Integer;
red,green,blue: Byte;
p: TColor;
begin
with Form1.Image1.Canvas do begin
for hoch := 0 to maxY do begin
for breit := 0 to maxX do begin
p := Image1.Canvas.Pixels[breit,hoch];
if p = 0 then Continue; // schwarz nicht in Palette
red := GetRValue(p);
green := GetGValue(p);
blue := GetBValue(p);
for i := 0 to 255 do begin
if (red = r[i]) and (green = g[i]) and (blue = b[i]) then begin
Bild[breit,hoch] := i; // gefunden
// aber was bezweckst Du damit? Was passiert in Bild?
end;
end;
end;// for breit
end; // for hoch
end; // with
end;
Wenn r[i], g[i] und b[i] einen Paletteneintrag repräsentieren sollten, so werden in Bild nur die Bildpunkte gesetzt, zu denen es einen Paletteneintrag gibt, alle anderen bleiben unverändert. Da Bilder aber schon lange nicht mehr mit Hilfe von Paletten dargestellt werden, dürfte das eher schief gehen. Früher enthielten Paletten 256 Farben für Bilder, die maximal 256 unterschiedliche Farben enthalten konnten. Durch Änderung der Palette änderte sich auch die optische Darstellung des Bildes, ohne dass Änderungen an der zugrundeliegenden Bilddatei erforderlich waren. Die Änderung der Farben erfolgte ausschließlich im Speicher der Grafikkarte.
Wenn man bedenkt, dass rot, grün und blau jeweils einen Wert von 0..255 enthalten können, also jeweils 256 unterschiedliche Werte, so kommt man auf 256 * 256 * 256 unterschiedliche Farben. Hier darauf zu hoffen, dass man bei einer Palette mit 256 Werten eine hohe Trefferquote hat, ist eher mutig.
256 * 256 * 256 = 16777216, davon sind "nur" 256 Werte in der Palette. alle anderen werden in der Prozedur Bild (vermutlich) nicht gesetzt. D. h.: 16776960 Farben werden bei Deiner Routine nicht gefunden. Damit liegt die Wahrscheinlichkeit, "einen Treffer in der Palette zu landen" bei ungefähr 0,00152587890625%, (x% = 256 wenn 16777216 = 100% -> x = 256 * 100 / 16777216 -> x = 25600 / 16777216 -> x = 0,00152587890625) also annähernd 0. Es werden also vermutlich nur sehr wenige Bildpunke farblich dargestellen, im schlimmsten Fall keine, weil zufällig keine der im Bild enthaltenen Farben in der Palette enthalten ist.