AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Helligkeit eines Bildes
Thema durchsuchen
Ansicht
Themen-Optionen

Helligkeit eines Bildes

Ein Thema von Merowinger · begonnen am 13. Mär 2006 · letzter Beitrag vom 13. Mär 2006
 
Merowinger

Registriert seit: 7. Jul 2005
13 Beiträge
 
Delphi 7 Enterprise
 
#1

Helligkeit eines Bildes

  Alt 13. Mär 2006, 18:58
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:

//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;
Hier ist meine Quelltext:

Delphi-Quellcode:

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;
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?

Danke Merowinger
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.
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