Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Toleranzen von Farben (https://www.delphipraxis.net/134030-toleranzen-von-farben.html)

BAMatze 14. Mai 2009 12:13

Re: Toleranzen von Farben
 
Deine Funktion sieht natürlich schöner aus, weil man die Farbe wechseln kann @DeddyH. Hab hier auch mal eine Funktion geschrieben gehabt, war schon fast fertig, als ich deine Post gesehen hab.

Hier mal meine Funktion:

Delphi-Quellcode:
procedure TForm1.Bildanalyse;
var i, j, AnzahlSchwPixel, PosOben, PosUnten, PosRechts, PosLinks, Anz, RefRValue,
    RefGValue, RefBValue, PCRValue, PCGValue, PCBValue: integer;
begin
  AnzahlSchwPixel := 0; //Anzahl der gefundenen schwarzen Pixel
  Anz := 0; // Anzahl der Schleifendurchgänge (reiner Kontrollwert für mich)
  // die Positionen für Unten und Rechts werden negativ gesetzt, da beim finden einer
  // dieser Grenzen immer ein positiver Wert eingetragen wird
  PosUnten := -1;
  PosRechts := -1;
  // die Psoitionen für Oben und Links werden übernatürlich groß gewählt, da somit eine
  // einfachere Prüfung durchgeführt werden kann.
  PosOben := 999;
  PosLinks := 999;
  Memo1.Clear;
  for i := 1 to FprivBMP.Width do
    begin
      for j := 1 to FprivBMP.Height do
        begin
          Anz := Anz + 1; // Kontrollwert erhöhen
          PCRValue := GetRValue(FprivBMP.Canvas.Pixels[i,j]);
          PCGValue := GetGValue(FprivBMP.Canvas.Pixels[i,j]);
          PCBValue := GetBValue(FprivBMP.Canvas.Pixels[i,j]);
          Memo1.Lines.Add('R ' + inttostr(PCRValue) + ',G ' + inttostr(PCGValue) + ', B ' + inttostr(PCBValue));
          if (PCRValue < 10) and
             (PCGValue < 10) and  // Hier gehe ich jetzt mal davon aus, dass man den Wert der Farbe clBlack weiß.
             (PCBValue < 10) then
            begin
              AnzahlSchwPixel := AnzahlSchwPixel + 1;
              if j < PosOben then PosOben := j;
              if i > PosRechts then PosRechts := i;
              if j > PosUnten then PosUnten := j;
              if i < PosLinks then PosLinks :=i;
            end;
        end;
    end;
  Lbl_Oben.Caption := inttostr(PosOben);
  Lbl_Unten.Caption := inttostr(PosUnten);
  Lbl_Rechts.Caption := inttostr(PosRechts);
  Lbl_Links.Caption := inttostr(PosLinks);
  Lbl_Anzahl.Caption := inttostr(AnzahlSchwPixel);
  Lbl_Anz.Caption := inttostr(Anz);
end;
Funktioniert auch eignentlich gut. Nur PErformance ist aufgrund des Memos nicht so toll.

markus5766h 14. Mai 2009 12:39

Re: Toleranzen von Farben
 
Hallo,
"Funktioniert auch eignentlich gut. Nur PErformance ist aufgrund des Memos nicht so toll."

speicher Deine Werte doch erst einmal nicht visuell (z.B. StringList, Array ...) und
kopiere die erhaltenen Werte nach Abarbeitung der Schleifen in Dein Memo.

BAMatze 14. Mai 2009 13:30

Re: Toleranzen von Farben
 
Zitat:

Zitat von markus5766h
Hallo,
"Funktioniert auch eignentlich gut. Nur PErformance ist aufgrund des Memos nicht so toll."

speicher Deine Werte doch erst einmal nicht visuell (z.B. StringList, Array ...) und
kopiere die erhaltenen Werte nach Abarbeitung der Schleifen in Dein Memo.

Das Memo war ja eigentlich nur mal gedacht, dass ich mir anschauen kann, welche Werte er überhaupt findet. Also kann eigentlich ganz raus fliegen und dann sollte das mit der Performance ok sein.

HeinzJ 14. Mai 2009 13:32

Re: Toleranzen von Farben
 
Würde nicht schon ein einfacher Bitmap-Vorher/Bitmap-Nacher Vergleich ausreichen ?

Medium 14. Mai 2009 16:49

Re: Toleranzen von Farben
 
Mal eine kleine Unwichtigkeit am Rande: Was möchtest du am Ende überhaupt erreichen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz