![]() |
Farbton eines Bildes ändern
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich möchte ein Bild (png), mit einer TColor, einfärben. Unten ist ein Beispiel: das Ausgangsbild ist rot und soll Grün werden wenn ich z.B.: clLime auswähle. Ich benutze die zwei Funktionen um ein Graustufenbild zu erzeugen. Ich dachte vielleicht kann man das um die Farbe erweitern.:
Delphi-Quellcode:
function ConvertColor(AColor: TColor): TColor;
var PixelColor, NewColor: Integer; begin if AColor <> clFuchsia then begin PixelColor := ColorToRGB(AColor); NewColor := Round((((PixelColor shr 16) + ((PixelColor shr 8) and $00FF) + (PixelColor and $0000FF)) div 3)) div 2 + 96; Result := RGB(NewColor, NewColor, NewColor); end else Result := clBtnFace; end; procedure ConvertColors(ABitmap: Graphics.TBitmap); var x, y: Integer; begin for x := 0 to ABitmap.Width - 1 do for y := 0 to ABitmap.Height - 1 do begin ABitmap.Canvas.Pixels[x, y] := ConvertColor(ABitmap.Canvas.Pixels[x, y]); end; end; |
AW: Farbton eines Bildes ändern
Hi,
Beispiel: ![]() "NewHue" gibt den Farbton, "NewSaturation" die Sättigung der Farbe an. |
AW: Farbton eines Bildes ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Danke an Blup du hast mich auf die richtige Idee gebracht.
Ich hab aus dem Orginalbild ein Bild nur mit Alphakanal gemacht, darauf kommt es mir ja auch eigentlich nur an. (siehe Anhang) :) hier dann der Code:
Delphi-Quellcode:
Im nachhinein eigentlich ganz einfach.
uses
ShLwApi; // für RGBToHLS und HLSToRGB function LoadPNG(Name: string; NewColor: TColor): Graphics.TBitmap; var PNGImage : TPngObject; hLib : THandle; NewHue, NewLuminance, NewSaturation : Word; x, y: Integer; pb : pByteArray; begin Result := Graphics.TBitmap.Create; try hLib := LoadLibrary(...); PNGImage := TPngObject.Create; PNGImage.LoadFromResourceName(hLib, Name); PNGImage.Transparent := true; ColorRGBToHLS(NewColor, NewHue, NewLuminance, NewSaturation); with PNGImage do begin for y := 0 to Height - 1 do begin pb := AlphaScanline[y]; for x := 0 to Width - 1 do begin Pixels[x, y] := ColorHLSToRGB(NewHue, Trunc((pb^[x] + NewLuminance) / 2), NewSaturation); end; end; end; Result.Canvas.Brush.Color := clBtnFace; Result.Width := PNGImage.Width; Result.Height := PNGImage.Height; Result.Canvas.StretchDraw(Rect(0, 0, PNGImage.Width, PNGImage.Height), PNGImage); PNGImage.Free; except end; end; 1. PNGImage laden (hier über LoadFromResourceName) 2. die neue Farbe des Bildes in HLS umwandeln 3. mit AlphaScanline den Alphakanal des Bildes laden 4. die Pixel mit der neuen Farbe und dem richtigen Alphawert setzen 5. da ich hier ein TBitmap zurückgebe, die Hintergrundfarbe setzen das PNGImage zeichnen Gruß David |
AW: Farbton eines Bildes ändern
Sowas ähnliches (in Bezug auf den ersten Beitrag) hatten wir auch schon mal hier:
![]() Gruß Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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