Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mit scanline bitmap auf farben scannen (https://www.delphipraxis.net/128599-mit-scanline-bitmap-auf-farben-scannen.html)

ToXiC 2. Feb 2009 15:09


mit scanline bitmap auf farben scannen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo zusammen
ich habe ein bitmap, welches ich auf die farbe schwarz scannen will
ist es komplett schwarz return true
sonst false
so weit so gut
mir wurde scanline empfolen, da dieses relativ schnell sein soll
ich habe bereits einen guten ansatz welcher bei 15 der 16 getesteten bitmaps den richtigen wert zurückggibt
nun frage ich mich natürlich wo der fehler liegt
ich hatte kein glück bei der suche, genau wie alle anderen, die ich zu dem problem befragt hab
hier ist der ansatz:

Delphi-Quellcode:
function NotBlack(bmp: TBitmap): Boolean;
type
  pRGBTripleArray = ^TRGBTripleArray;
  TRGBTripleArray = Array[0..4095] Of TRGBTriple;

var
  x,y: Integer;
  Row: pRGBTripleArray;
begin
Result := False;
For y := 0 To bmp.Height -1 Do
  Begin
  Row := bmp.Scanline[y];
  For x := 0 To bmp.Width -1 Do
    Begin
    If (Row[x].rgbtRed <> 0) Or (Row[x].rgbtGreen <> 0) Or (Row[x].rgbtBlue <> 0) Then
      Begin
      Result := True;
      Exit;
      End;
    End;
  End;
end;
irgentwelche vorschläge?

achja hier is das bild noch angelegt welches den falschen wert zurückgibt

danke

DeddyH 2. Feb 2009 15:22

Re: mit scanline bitmap auf farben scannen
 
Was gibt Deine Funktion denn zurück? True, da das Bild nicht komplett schwarz ist, oder täusche ich mich?

ToXiC 2. Feb 2009 15:46

Re: mit scanline bitmap auf farben scannen
 
genau

Mavarik 2. Feb 2009 15:47

Re: mit scanline bitmap auf farben scannen
 
:coder: Hallo!

Vielleicht ist es keine BMP mit 24 Bit?

Die BSP.Datei ist ja auch nicht ganz schwarz..

Oder habe ich jetzt etwas falsch verstanden? :gruebel:

Frank

DeddyH 2. Feb 2009 16:06

Re: mit scanline bitmap auf farben scannen
 
Eben, sobald das erste nichtschwarze Pixel gefunden wird, bricht die Funktion ja ab und gibt true zurück.

Teekeks 2. Feb 2009 16:06

Re: mit scanline bitmap auf farben scannen
 
@mavarik: Die function solte bei dem Bild den Wert false zurückliefern, da das Bild ja nicht komplet schwarz ist. Sie liefert aber true.
[edit] mist. roten Kasten überklickt... [/edit]

DeddyH 2. Feb 2009 16:07

Re: mit scanline bitmap auf farben scannen
 
Die Funktion heißt aber "NotBlack" und arbeitet auch so.

Garfield 3. Feb 2009 09:49

Re: mit scanline bitmap auf farben scannen
 
Zitat:

Zitat von DeddyH
Die Funktion heißt aber "NotBlack" und arbeitet auch so.

Bei obigem Bild aber nicht, da müsste die Function so aussehen:
Delphi-Quellcode:
function NotBlack(bmp: TBitmap): Boolean;
const
  PixelCountMax = 32768;

type
  pRGBQuadArray = ^TRGBQuadArray;
  TRGBQuadArray = ARRAY[0..PixelCountMax-1] OF TRGBQuad;

var
  x, y : Integer;
  Row : pRGBQuadArray;

begin
  Result := False;

  for y := 0 to bmp.Height -1
  do begin
    Row := bmp.Scanline[y];
   
    for x := 0 To bmp.Width -1 
    do begin
      Result := (Row[x].rgbBlue <> 0) or (Row[x].rgbGreen <> 0) or (Row[x].rgbRed <> 0);

      if Result then Exit;
    end;
  end;
end;
Nachtrag:

Das Pixelformat ist hier pf32bit. Deshalb wird bei Scanline 8 bit zu wenig gelesen und die Function kommt tatsächlich gar nicht bis zu den andersfarbigen Pixeln. Das vierte Byte ist reserviert.

ToXiC 3. Feb 2009 11:05

Re: mit scanline bitmap auf farben scannen
 
wow danke
ich werds gleich mal testen
aber warum

Delphi-Quellcode:
PixelCountMax = 32768;
wie kommst du auf diesen wert?

sirius 3. Feb 2009 11:26

Re: mit scanline bitmap auf farben scannen
 
2^15=32678


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Seite 1 von 2  1 2      

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