Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Graustufen in einem Bild farbig markieren (https://www.delphipraxis.net/44754-graustufen-einem-bild-farbig-markieren.html)

endeffects 24. Apr 2005 10:56


Graustufen in einem Bild farbig markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich möchte eine Methode schreiben die bestimmte Graustufen
mit einer Farbe markiert, in diesem Fall sollen alle Graustufen
zwischen 200 und 255 mit rot markiert werden.
Leider scheint das irgendwie nicht zu klappen (siehe Anhang).
Hat Jemand eine Idee woran das liegen könnte?


Delphi-Quellcode:
Var
  lBitmap : TBitmap;
  x, y, z   : Integer;
  P      : PRGBQuad;
Begin
  img_Changed.Picture.Assign(Nil);
  lBitmap := TBitMap.create;
  Try
    lBitmap.Assign(CacheBitmap);
    for y := 0 to lBitmap.Height - 1 do
    begin
      P := lBitmap.ScanLine[y];
      for x := 0 to lBitmap.Width - 1 do
      begin
        for z := 200 to 255 do
        begin
          If ( P^.rgbRed = z ) AND ( P^.rgbGreen = z ) AND ( P^.rgbBlue = z ) Then
          Begin
            P^.rgbRed  := z;
            P^.rgbGreen := 0;
            P^.rgbBlue := 0;
        end;
        Inc(P);
      end;
    End;
    img_Changed.Picture.Assign(lBitmap);

  Finally
    lBitmap.Free;
  End;

SirThornberry 24. Apr 2005 11:06

Re: Graustufen in einem Bild farbig markieren
 
was funktioniert nicht? kommt ein fehler?
desweiteren finde ich zu
Delphi-Quellcode:
If ( P^.rgbRed = z ) AND ( P^.rgbGreen = z ) AND ( P^.rgbBlue = z ) Then
Begin
nicht das schließende "End"
anstelle von
Delphi-Quellcode:
for z := 200 to 255 do
würde ich dir auch empfehlen einfach diese Anweisung
Delphi-Quellcode:
for z := 200 to 255 do
begin
  If ( P^.rgbRed = z ) AND ( P^.rgbGreen = z ) AND ( P^.rgbBlue = z ) Then
abzuändern das sie so aussieht
Delphi-Quellcode:
if (P^.rgbRed >= 200) and (P^.rgbRed <= 255) and
   (P^.rgbRed = P^.rgbGreen) and (P^.rgbRed = P^.rgbBlue) then
damit spaarst du dir die schleife und das "z" (wird dadurch schneller das ganze)

Khabarakh 24. Apr 2005 11:19

Re: Graustufen in einem Bild farbig markieren
 
Du musst unbedingt noch die Farbtiefe des Bitmaps festlegen!
Delphi-Quellcode:
lBitmap.Assign(CacheBitmap);
lBitmap.PixelFormat := pf32bit;

endeffects 24. Apr 2005 11:22

Re: Graustufen in einem Bild farbig markieren
 
hallo,

danke für deine antwort, nein ein fehler kommt nicht,
ich hab den code nun nach deinen vorschlägen abgeändert,
das problem das nicht alle graustufen ersetzt wurden
lag daran das ich die farbtiefe nicht festgelegt hatte

danke euch beiden, nun funktioniert es =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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-2025 by Thomas Breitkreuz