![]() |
Helligkeit eines Bildes
Hey DPler,
ich habe hier zwei procduren die die Helligkeit von einem Bild ändern. Die erste Funktioniert (habe ich auch aus einem Buch geklaut). Den Quelltext an sich, was da passiert und wie man da von einem Bild die Helligkeit ändert, habe ich verstanden.
Delphi-Quellcode:
Hier ist meine Quelltext://Walter Doberenz, Thomas Kowalski Borland Delphi 7 Hanser Verlag procedure Helligkeit(Bitmap, // Zielbitmap Original : TBitmap; // Original Value : integer); // Wert zw -240 ... + 240 var x,y : integer; Ziel : ^TRGBTriple; Quelle : ^TRGBTriple; n : byte; ar : array[0..255] of byte; begin n := abs(value); if value > 0 then for x := 0 to 255 do if integer(x + n) > 255 then ar[x] := 255 else ar[x] := x + n else for x := 0 to 255 do if integer(x - n) < 0 then ar[x] := 0 else ar[x] := x - n; for y := 0 to Bitmap.Height-1 do begin Ziel := Bitmap.Scanline[y]; Quelle := Original.Scanline[y]; for x := 0 to (Bitmap.Width-1) do begin Ziel^.rgbtBlue := ar[Quelle^.rgbtBlue]; Ziel^.rgbtred := ar[Quelle^.rgbtred]; Ziel^.rgbtGreen := ar[Quelle^.rgbtGreen]; inc(Ziel); inc(quelle); end; end; end; //Der Aufruf: procedure TMainForm.Button1Click(Sender: TObject); begin image.Picture.bitmap.PixelFormat := pf24bit; Helligkeit(image.picture.bitmap,image.picture.bitmap,StrToInt(EFaktor.Text)); image.repaint end;
Delphi-Quellcode:
Ich helle um Faktor 50 auf und gleich wieder ab. Das Bild speichere ich und vergleiche es mit dem Ausgangsbild und es stimmt nicht über ein. Woran liegt das? Ich verstehe nicht warum in der ersten Methode "2" Bilder verwendet werden. Aus einem wird gelesen und in das andere geschrieben. Warum?procedure HelligkeitTest(Bild : TBitmap; Faktor : Smallint); var x, y : integer; Zeile : ^TRGBTriple; begin for y := 0 to Bild.Height - 1 do begin Zeile := Bild.ScanLine[y]; for x := 0 to Bild.Width - 1 do begin case Zeile^.rgbtRed + Faktor of -255..-1 : Zeile^.rgbtRed := 0; 0..255 : Zeile^.rgbtRed := Zeile^.rgbtRed + Faktor; 256..500 : Zeile^.rgbtRed := 255; end; case Zeile^.rgbtGreen + Faktor of -255..-1 : Zeile^.rgbtGreen := 0; 0..255 : Zeile^.rgbtGreen := Zeile^.rgbtGreen + Faktor; 256..500 : Zeile^.rgbtGreen := 255; end; case Zeile^.rgbtBlue + Faktor of -255..-1 : Zeile^.rgbtBlue := 0; 0..255 : Zeile^.rgbtBlue := Zeile^.rgbtBlue + Faktor; 256..500 : Zeile^.rgbtBlue := 255; end; Inc(Zeile); end; end; Bild.Assign(Bild); end; //Der Aufruf: procedure TMainForm.BtnHelligkeitClick(Sender: TObject); begin Image.Picture.Bitmap.PixelFormat := pf24bit; HelligkeitTest(Image.Picture.Bitmap,StrToInt(EFaktor.Text)); end; Danke Merowinger |
Re: Helligkeit eines Bildes
Zitat:
Flare |
Re: Helligkeit eines Bildes
Hallo Merowinger,
durch das Clipping der Helligkeitswerte an den Intervallgrenzen hast du keine umkehrbare Funktion mehr. Die beiden Bildparameter erlauben dir wahlweise das Überschreiben oder Beibehalten des Originals. @Flare: nur ein Zweig der case Anweisung wird durchlaufen - Pascal ist nicht C. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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