AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Leeres TPNGImage erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Leeres TPNGImage erzeugen

Ein Thema von Tonic1024 · begonnen am 28. Sep 2012 · letzter Beitrag vom 28. Sep 2012
Antwort Antwort
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Leeres TPNGImage erzeugen

  Alt 28. Sep 2012, 10:16
Irgendwie hab ich so meine Probleme ein leeres, transparentes TPNGImage zu erzeugen in dem ich dann zeichnen kann.

Ich erhalte zwar ein leeres, transparentes Image in den richtigen Abmessungen aber der Rest schlägt fehl. Lade ich ein vorhandenes Bild von der Platte wird meine Linie darauf angezeigt.

Hier mal mein Versuchsaufbau.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Img: TPNGImage;
    Bild: TPngImage;
begin
  Bild:=TPNGImage.Create;
  Bild.LoadFromFile('c:\dings\box.png');

  Img:=TPNGImage.Create;
  Img.CreateBlank(Bild.Header.ColorType, Bild.Header.BitDepth, Bild.Width , Bild.Height);
  Img.CreateAlpha;

// Img.Assign(Bild); // Dann funktionierts. Das will ich aber nicht.

  // irgendwas mit Img machen
  Img.Canvas.CopyMode:= cmSrcCopy;
  Img.Canvas.Draw(0, 0, Bild);
  Img.Draw(Bild.Canvas, Rect(0, 0, Bild.Width, Bild.Height));

  Img.Canvas.Pen.Color:=clBlack;
  Img.Canvas.MoveTo(0, 0);
  Img.Canvas.LineTo(50, 50);

  Self.Canvas.Draw(20, 20, Img); // Ausgabe auf dem Form...
  Img.SaveToFile('c:\dings\box2.png'); // ... und zur Kontrolle speichern - beides leer
end;
Wo ist mein Fehler?

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Leeres TPNGImage erzeugen

  Alt 28. Sep 2012, 10:51
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);

var Img: TPNGImage;
    Bild: TPngImage;
    i:Integer;
begin
  Bild:=TPNGImage.Create;
  Bild.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\128x128\shadow\add.png');

  Img:=TPNGImage.CreateBlank(COLOR_RGBAlpha, 8, Bild.Width , Bild.Height);
  Img.CreateAlpha;

   BitBlt (Img.Canvas.Handle, 0 , 0 , Bild.Width, Bild.Height, Bild.Canvas.Handle, 0, 0, SRCCOPY);
   For I := 0 To Bild.Width - 1 Do
      CopyMemory (Img.AlphaScanline [i], pByte (dword (Bild.AlphaScanline [i])), Bild.Width);



  Img.Canvas.Pen.Color:=clLime;
  Img.Canvas.MoveTo(0, 0);
  Img.Canvas.LineTo(50, 50);
  Canvas.Draw(20, 20, IMG); // Ausgabe auf dem Form...
end;
Ein Problem ist die Beschränkung des TCanvas bezüglich des Alphakanals, Du siehst die gemalten Linien nur wo Alpha>0, hier könnte GDI+ helfen, welches mit Alphakanälen umgehen kann.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

AW: Leeres TPNGImage erzeugen

  Alt 28. Sep 2012, 11:13
Vielen Dank für deine rasendschnelle Antwort.

Dein Beispiel führt zwar zu dem selben Ergebnis wie Assign, was ich ja nicht wollte, aber ein leeres PNGImage hab ich immer noch nicht. Muss ich mich denn ganz von der Idee verabschieden in ein PNG hineinzeichen, Bitmaps ausschneiden und hinein zu kopieren?

Sollte ich wenn ich Transparenz und Semitransparenz brauche vielleicht lieber mit TBitmap32 auseinander setzen? Oder hab ich dort wieder die selben Probleme? Oder ist GDI+ der einzige Weg? Hab damit schon mal experimentiert aber es ist mir eigentlich zu komplex für meine Mini-Aufgabe.

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  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 12:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz