![]() |
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:
irgentwelche vorschläge?
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; achja hier is das bild noch angelegt welches den falschen wert zurückgibt danke |
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?
|
Re: mit scanline bitmap auf farben scannen
genau
|
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 |
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.
|
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] |
Re: mit scanline bitmap auf farben scannen
Die Funktion heißt aber "NotBlack" und arbeitet auch so.
|
Re: mit scanline bitmap auf farben scannen
Zitat:
Delphi-Quellcode:
Nachtrag:
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; 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. |
Re: mit scanline bitmap auf farben scannen
wow danke
ich werds gleich mal testen aber warum
Delphi-Quellcode:
wie kommst du auf diesen wert?
PixelCountMax = 32768;
|
Re: mit scanline bitmap auf farben scannen
2^15=32678
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr. |
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