Es wird eine ScrollBar benötigt, deren Max Wert auf 25 gesetzt werden muss.
Wenn das Bitmap wieder abgedunkelt werden soll, muss die Quelle des Images bei jeder Scrollbar-Bewegung vorher neu geladen werden, bevor die Berechnung stattfindet.
Das ist diese Zeile: BrightnessBitmap(BmpSource, BmpDest, ScrollBar1.Position);
Dazu muss das Bild im Projektordner gespeichert und von dort aus geladen werden, oder sie wird von einem anderen Image aus in das zu bearbeitende Image kopiert.
Man kann natürlich das Bild in den Speicher legen, doch das ging oftmals schief, besonders bei großen Bildern.
Procedure BrightnessBitmap(SourceBitmap: TBitmap; out DestBitmap: TBitmap; Prozent:integer);
var
x,y,farbe:Integer;
r,g,b:byte;
begin
DestBitmap.Assign(SourceBitmap);
if Prozent < 0 then begin //Wenn abdunkeln
for y:=0 to DestBitmap.Height-1 do
for x:=0 to DestBitmap.Width-1 do begin
farbe:=DestBitmap.Canvas.Pixels[x,y];
b:=byte(farbe shr 16); //b=Blau (0..255 oder $00..$FF)
g:=byte(farbe shr 8); //g=Grün (0..255 oder $00..$FF)
r:=byte(farbe); //r=rot(0..255 oder $00..$FF)
r:=round(r*(100+prozent)/100);
g:=round(g*(100+prozent)/100);
b:=round(b*(100+prozent)/100);
DestBitmap.Canvas.Pixels[x,y]:=b shl 16 + g shl 8 + r;
end;
end else begin //ansonsten aufhellen
for y:=0 to DestBitmap.Height-1 do
for x:=0 to DestBitmap.Width-1 do begin
farbe:=DestBitmap.Canvas.Pixels[x,y];
b:=byte(farbe shr 16);
g:=byte(farbe shr 8);
r:=byte(farbe);
r:=round(r+((255-r)*(prozent)/100));
g:=round(g+((255-g)*(prozent)/100));
b:=round(b+((255-b)*(prozent)/100));
DestBitmap.Canvas.Pixels[x,y]:=b shl 16 + g shl 8 + r;
end;
end;
end;
Beispiel :
procedure TForm1.ScrollBar1Change(Sender: TObject);
var BmpSource, BmpDest : TBitmap;
begin
BmpSource := TBitmap.Create;
BmpDest := TBitmap.Create;
try
BmpSource.Assign(Image1.Picture.Bitmap);
BmpSource.PixelFormat := pf24bit;
BmpDest.Assign(Image1.Picture.Bitmap);
// HIER FÜR DAS ABDUNKELN IMAGE NEU LADEN
BrightnessBitmap(BmpSource, BmpDest, ScrollBar1.Position);
Image1.Picture.Bitmap.Assign(BmpDest);
finally
BmpSource.Free; BmpDest.Free;
end;
end;
Keine Kommentare:
Kommentar veröffentlichen