Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#3

AW: TColor gibt mir keine 256 Farben

  Alt 16. Feb 2019, 10:34
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.
  Mit Zitat antworten Zitat