AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

PNG Image Gradient

Ein Thema von greenmile · begonnen am 7. Sep 2021 · letzter Beitrag vom 8. Sep 2021
Antwort Antwort
greenmile

Registriert seit: 17. Apr 2003
1.100 Beiträge
 
Delphi 10.3 Rio
 
#1

PNG Image Gradient

  Alt 7. Sep 2021, 17:51
Hallo zusammen,

ich versuche es nun schon seit Stunden und bekomme es nicht hin. Ich habe ein PNG Image und möchte, dass das ab ca der Hälfte bis zum Ende transparent wird (also ab 50% mit jedem 10% Schritt mehr). Aber irgendwie bekomme ich den Dreh nicht raus. Hat vielleicht hat jemand nen Code-Schnipsel für mich oder einen Link?

Alternativ wäre ich auch für einen Code dankbar, der mir die Ecken rund macht. Alles, was ich im Netz gefunden habe, war entweder saulangsam oder hat nicht funktioniert.

Viele Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.799 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: PNG Image Gradient

  Alt 7. Sep 2021, 17:57
PngComponents hat in PngFunctions.pas eine Methode MakeImageBlended . Die macht das zwar mit dem ganzen Bild, aber das könnte dir eventuell ja weiter helfen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.100 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: PNG Image Gradient

  Alt 8. Sep 2021, 08:46
Super, das hat schonmal weitergeholfen, habe die Funktion kopiert und angepasst, läuft.
Hast du für "abgerundete Ecken" zufällig auch eine Idee? Als Quelle könnte BMP, PNG oder JPG geliefert werden.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.332 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: PNG Image Gradient

  Alt 8. Sep 2021, 10:56
Transparente abgerundete Ecken:
Delphi-Quellcode:
function CreateGrayScalePalette: HPalette;
var
  LogPalette: TMaxLogPalette;
  b: Byte;
begin
  LogPalette.palVersion := $300;
  LogPalette.palNumEntries := 256;
  for b := 0 to 255 do
  begin
    with LogPalette.palPalEntry[b] do
    begin
      peRed := b;
      peGreen := b;
      peBlue := b;
    end;
  end;
  Result := CreatePalette(@LogPalette);
end;

procedure Set8BitGrayScale(ABitmap: TBitmap);
begin
  ABitmap.PixelFormat := pf8Bit;
  ABitmap.Palette := CreateGrayScalePalette;
end;

procedure SetAlphaRoundRect(AImage: TPngImage; dx, dy: Integer);
var
  BmpAlpha: TBitmap;
  y: Integer;
begin
  BmpAlpha := TBitmap.Create;
  try
    Set8BitGrayScale(BmpAlpha);
    {Hintergrund Schwarz}
    BmpAlpha.Canvas.Brush.Color := clBlack;
    BmpAlpha.SetSize(AImage.Width, AImage.Height);
    {sichtbaren Bereich Weiss füllen}
    BmpAlpha.Canvas.Pen.Style := psClear;
    BmpAlpha.Canvas.Brush.Color := clWhite;
    BmpAlpha.Canvas.RoundRect(BmpAlpha.Canvas.ClipRect, dx, dy);
    {Daten aus der Bitmap in den Alphachannel übernehmen}
    AImage.CreateAlpha;
    for y := 0 to AImage.Height - 1 do
    begin
      Move(BmpAlpha.ScanLine[y]^, AImage.AlphaScanline[y]^, AImage.Width);
    end;
  finally
    BmpAlpha.Free;
  end;
end;

procedure TForm1.TestClick(Sender: TObject);
var
  Image: TPngImage;
begin
  Image := TPngImage.Create;
  try
    Image.LoadFromFile('Background_Blue.png');

    SetAlphaRoundRect(Image, 20, 20);

    PaintBox1.Canvas.Draw(0, 0, Image);
  finally
    Image.Free;
  end;
end;
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.100 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: PNG Image Gradient

  Alt 8. Sep 2021, 13:04
Super, danke für den Source. Der funktioniert perfekt, ich schulde euch was!

Geändert von greenmile ( 8. Sep 2021 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf