AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls [Firemonkey] Canvas als PNG mit Transparenz speichern
Thema durchsuchen
Ansicht
Themen-Optionen

[Firemonkey] Canvas als PNG mit Transparenz speichern

Ein Thema von milos · begonnen am 11. Apr 2016 · letzter Beitrag vom 12. Apr 2016
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl
Online

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: [Firemonkey] Canvas als PNG mit Transparenz speichern

  Alt 12. Apr 2016, 17:32
Vielleicht erst mal was grundsätzliches: Intern verwendet FMX immer eine 32-bit Bitmap, also mit Transparenz. Wenn Du das speicherst, reicht es einen Dateityp zu wählen, der Transparenz kann (also z.B. '.png'), die Transparenz bleibt dann automatisch erhalten.

Zu Deinem Code: Ohne Beginscene und Endscene wirst Du i.d.R. nichts sehen.

Hier ein kleines Beispiel, das ein rotgefülltes Rundeck erzeugt. Wenn Du das dann mit dem Button "Speichere" speicherst und die Datei in einem Bildbearbeitungsprogramm öffnest, sieht das so wie in der Anlage aus (Transparenz wird durch das Schachmuster signalisiert).

Außerdem musst Du drauf achten, auf welchen Canvas Du Dich beziehst (also nicht den Form-Canvas verwenden).

Delphi-Quellcode:
unit Unit18;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
  FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation;

type
  TForm18 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form18: TForm18;

implementation

{$R *.fmx}

procedure TForm18.Button1Click(Sender: TObject);
begin
  with image1.Bitmap.Canvas do begin
    if beginscene then begin
      try
        Fill.Color := TAlphaColorRec.red;
        FillRect(rectF (20,20, 100,100), 30,30,AllCorners,100);
      finally
        endscene;
      end;
    end;
  end;
end;

procedure TForm18.Button2Click(Sender: TObject);
begin
  image1.Bitmap.SaveToFile('D:\Test.png');
end;

procedure TForm18.FormCreate(Sender: TObject);
begin
  image1.Bitmap.SetSize(Round (image1.Width), Round (image1.Height));
end;

end.
Angehängte Grafiken
Dateityp: jpg Testbild.jpg (116,4 KB, 17x aufgerufen)
Dateityp: jpg Progi.jpg (15,9 KB, 14x aufgerufen)

Geändert von Harry Stahl (12. Apr 2016 um 17:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [Firemonkey] Canvas als PNG mit Transparenz speichern

  Alt 12. Apr 2016, 17:58
Vielleicht erst mal was grundsätzliches: Intern verwendet FMX immer eine 32-bit Bitmap, also mit Transparenz. Wenn Du das speicherst, reicht es einen Dateityp zu wählen, der Transparenz kann (also z.B. '.png'), die Transparenz bleibt dann automatisch erhalten.

Zu Deinem Code: Ohne Beginscene und Endscene wirst Du i.d.R. nichts sehen.

Hier ein kleines Beispiel, das ein rotgefülltes Rundeck erzeugt. Wenn Du das dann mit dem Button "Speichere" speicherst und die Datei in einem Bildbearbeitungsprogramm öffnest, sieht das so wie in der Anlage aus (Transparenz wird durch das Schachmuster signalisiert).

Außerdem musst Du drauf achten, auf welchen Canvas Du Dich beziehst (also nicht den Form-Canvas verwenden).
Danke Harry, das war der entscheidende Tipp und es funktioniert nun einwandfrei!

Vielen vielen dank, dachte mir schon das da etwas kleines aber wichtiges fehlt... Mir standen schon die Haare zu berge!

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#3

AW: [Firemonkey] Canvas als PNG mit Transparenz speichern

  Alt 12. Apr 2016, 18:07
Du solltest dir meinen Vorschlag auch nochmal ansehen, denn nicht alle Plattformen unterstützen alle Formate.

http://docwiki.embarcadero.com/Libra...aphics.TBitmap

http://docwiki.embarcadero.com/Libra...te_Bildformate

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: [Firemonkey] Canvas als PNG mit Transparenz speichern

  Alt 12. Apr 2016, 20:04
Du solltest dir meinen Vorschlag auch nochmal ansehen, denn nicht alle Plattformen unterstützen alle Formate.

http://docwiki.embarcadero.com/Libra...aphics.TBitmap

http://docwiki.embarcadero.com/Libra...te_Bildformate

Rollo
Guter Hinweis.

Sobald ich mit Begin/EndScene arbeite kann ich auch ohne Probleme mit TBitmapSufrace das Canvas abspeichern. Danke!

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:05 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