Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Photoshopfilter: Dunkle Bereiche Vergrößern (https://www.delphipraxis.net/72083-photoshopfilter-dunkle-bereiche-vergroessern.html)

Eichhoernchen 25. Jun 2006 12:49


Photoshopfilter: Dunkle Bereiche Vergrößern
 
So, da ich diesen Filter brauchte habe ich ihn nachgecodet.

Er benötigt die RGBtoHSV und HSVtoRGB Funktionen aus: http://www.delphipraxis.net/internal...ct.php?t=24154

Beschreibung nach Photoshop:
Zitat:

"Dunkle Bereiche vergrößern" und "Helle Bereiche vergrößern" (Photoshop) Diese beiden Filter sind zum Ändern von Masken sehr nützlich. Der Filter "Dunkle Bereiche vergrößern" entspricht dem Anwenden einer Überfüllung - schwarze Bereiche werden ausgedehnt und weiße Bereiche verkleinert. Der Filter "Helle Bereiche vergrößern" entspricht dem Anwenden einer Unterfüllung - weiße Bereiche werden ausgedehnt und schwarze Bereiche verkleinert. Genau wie der Filter "Helligkeit interpolieren" werden die Filter "Dunkle Bereiche vergrößern" und "Helle Bereiche vergrößern" auf einzelne Pixel in einer Auswahl angewendet. Innerhalb eines angegebenen Radius ersetzen die Filter "Dunkle Bereiche vergrößern" und "Helle Bereiche vergrößern" den Helligkeitswert des aktuellen Pixels durch den höchsten oder niedrigsten Helligkeitswert der umgebenden Pixel.
Delphi-Quellcode:
function ExpandDarkAreas(bmp : TBitmap; const range : byte) : TBitmap;
var i, j, x, a, b, minimum, count : integer;
    angle : array of integer;
    saturation, brightness : array of byte;
    pixcolor : TColor;
Begin
 count := (range+range+1)*(range+range+1); //Anzahl der Pixel die untersucht werden
 //Arrays auf Länge setzen
 setlength(angle, count);
 setlength(saturation, count);
 setlength(brightness, count);
 //Funktionsergebnis vorbereiten
 result := TBitmap.Create;
 result.Width := bmp.Width;
 result.Height := bmp.Height;
 result.PixelFormat := bmp.PixelFormat;
 //Alle Pixel sollen durchlaufen werden
 for i := 0 to bmp.Width-1 do
  for j := 0 to bmp.Height-1 do
    Begin
     x := 0;
     for a := -range to range do
      for b := -range to range do
       Begin
        //HSV Werte in die Arrays speichern
        pixcolor := bmp.Canvas.Pixels[i+a, j+b];
        RGBtoHSV(GetRValue(pixcolor), GetGValue(pixcolor), GetBValue(pixcolor), angle[x], saturation[x], brightness[x]);
        inc(x);
       end;
     //Dunkelsten Wert suchen!
     minimum := brightness[0];
     for x := 1 to count-1 do
      minimum := Min(minimum, brightness[x]); //Für helle Bereiche vergrößern: statt Min=>Max
    //Dunkelsten Wert in neue Bitmap setzen.
     result.Canvas.Pixels[i, j] := HSVtoRGB(angle[(count div 2)+1], saturation[(count div 2)+1], minimum);
    end;
end;

Hmm der Code sollte eigentlich ausreichend Kommentiert sein.


Viel Spaß Eichhoernchen

Eichhoernchen 25. Jun 2006 20:12

Re: Photoshopfilter: Dunkle Bereiche Vergrößern
 
Muss ich leider zurückzoehen den Eintrag, es ist nicht genau der Photoshopfilter, zwar macht der Filter genau das was in der Beschreibung steht, jedoch scheint Photoshop noch die Farben irgendwie zu mischen!


Sorry ich gucke ob ich es schaffe es richtig zu bekommen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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