Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Auf Canvas zeichnen, wenn PNG (https://www.delphipraxis.net/160327-auf-canvas-zeichnen-wenn-png.html)

EWeiss 8. Mai 2011 15:47

AW: Auf Canvas zeichnen, wenn PNG
 
Zitat:

Inwiefern beim Kopieren der Alpha-Channel erhalten bleibt, weiß ich nicht sicher, aber prinzipiell hätte ein 32Bit-Bitmap Platz dafür.
Starte mal ein Paint Programm ala PhotoShop
Konvertiere ein PNG nach Bitmap und siehe was dann vom alpha Channel noch übrigbleibt.

Ein Weißer Hintergrund mehr nicht... die Transparenz wird komplett entfernt.

gruss

Namenloser 8. Mai 2011 15:50

AW: Auf Canvas zeichnen, wenn PNG
 
Zitat:

Zitat von EWeiss (Beitrag 1099572)
Zitat:

Inwiefern beim Kopieren der Alpha-Channel erhalten bleibt, weiß ich nicht sicher, aber prinzipiell hätte ein 32Bit-Bitmap Platz dafür.
Starte mal ein Paint Programm ala PhotoShop
Konvertiere ein PNG nach Bitmap und siehe was dann vom alpha Channel noch übrigbleibt.

Ein Weißer Hintergrund mehr nicht... die Transparenz wird komplett entfernt.

Und was hat Photoshop mit Delphi zu tun?
Ich habe schon mit ganz normalen Bitmaps mit Alphachannel gearbeitet... war überhaupt kein Problem. Du darfst nur nicht die veralteten GDI-Routinen zum Zeichnen nutzen.

EWeiss 8. Mai 2011 15:56

AW: Auf Canvas zeichnen, wenn PNG
 
Zitat:

Zitat von NamenLozer (Beitrag 1099573)
Zitat:

Zitat von EWeiss (Beitrag 1099572)
Zitat:

Inwiefern beim Kopieren der Alpha-Channel erhalten bleibt, weiß ich nicht sicher, aber prinzipiell hätte ein 32Bit-Bitmap Platz dafür.
Starte mal ein Paint Programm ala PhotoShop
Konvertiere ein PNG nach Bitmap und siehe was dann vom alpha Channel noch übrigbleibt.

Ein Weißer Hintergrund mehr nicht... die Transparenz wird komplett entfernt.

Und was hat Photoshop mit Delphi zu tun?
Ich habe schon mit ganz normalen Bitmaps mit Alphachannel gearbeitet... war überhaupt kein Problem. Du darfst nur nicht die veralteten GDI-Routinen zum Zeichnen nutzen.

Kein Problem solange du es nicht von einem zum anderen konvertierst.
Teste es doch ganz einfach ;)

gruss

rollstuhlfahrer 8. Mai 2011 16:26

AW: Auf Canvas zeichnen, wenn PNG
 
Ich will mal GDI+ als Stichwort einwerfen. Da das PNG von Natur aus unterstützt, wird es wohl auch keine Probleme geben, wenn man mit den GDI+-Routinen auf das Bild malt.

Bernhard

Thom 8. Mai 2011 16:44

AW: Auf Canvas zeichnen, wenn PNG
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1099576)
Da das PNG von Natur aus unterstützt, wird es wohl auch keine Probleme geben, wenn man mit den GDI+-Routinen auf das Bild malt.

Benötigst Du da nicht auch ein gültiges DC-Handle (TCanvas.Handle)? :gruebel:

Übrigens steht bei Delphi XE in der PNGImage-Unit
Delphi-Quellcode:
const
  LibraryVersion = '1.564';

  //...

  TPngImage = class{$IFDEF UseDelphi}(TGraphic){$ENDIF}
  //...
  public
  //...
    {Canvas}
    {$IFDEF UseDelphi}property Canvas: TCanvas read fCanvas;{$ENDIF}
  //...
  end.
Gibt es da evtl. zu älteren Versionen einen Unterschied?

Edit:
Ich hab's jetzt noch einmal mit Delphi 5 getestet, als TPNGImage noch TPNGObject hieß: Das Zeichnen auf den TPNGxxx-Canvas funktioniert definitiv!

Namenloser 8. Mai 2011 17:08

AW: Auf Canvas zeichnen, wenn PNG
 
Liste der Anhänge anzeigen (Anzahl: 1)
OK, ich habe es getestet:
  1. TPNGObject.Canvas ist tatsächlich beschreibbar
  2. Beim Assign geht der Alphachannel verloren (weil leider nicht „kopiert“ sondern gezeichnet wird (mit AlphaBlending))

@EWeiss: Das heißt aber nicht dass es nicht möglich wäre den AlphaChannel zu erhalten. PNGDelphi macht es nur einfach nicht, und die meisten Programme auch nicht.

Im Anhang befindet sich ein DUnit-TestProjekt, in dem auch eine Methode gezeigt wird, wie man den Alphachannel erhalten kann (man kann dann aber nicht die GDI zur Weiterverarbeitung nutzen). Das Rückkopieren von einem Bitmap in ein PNG geht ähnlich.

Aber wenn es auch direkt mit TPNGObject.Canvas geht, ist das natürlich eh unnötig...

rollstuhlfahrer 8. Mai 2011 17:16

AW: Auf Canvas zeichnen, wenn PNG
 
Zitat:

Zitat von Thom (Beitrag 1099577)
Benötigst Du da nicht auch ein gültiges DC-Handle (TCanvas.Handle)? :gruebel:

Kommt ganz drauf an, wie man das Bild lädt. In diesem Fall ist der beste Weg, ein GDIP-Image zu nehmen und dann mit Hilfe von .LoadFromFile() das Image zu laden. Dass man zeichnen kann, braucht man eine GDIP-Graphic. Diese kann man sich aus dem GDIP-Image erstellen lassen und schon kann man zeichnen.

Sicherheitshalber danach ein Graphic.Flush() ausführen, dass auch wirklich gezeichnet wurde und nicht nur die Aufträge dazu gegeben wurden.

Bernhard

EWeiss 8. Mai 2011 17:47

AW: Auf Canvas zeichnen, wenn PNG
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1099576)
Cih will mal GDI+ als Stichwort einwerfen. Da das PNG von Natur aus unterstützt, wird es wohl auch keine Probleme geben, wenn man mit den GDI+-Routinen auf das Bild malt.

Bernhard

Jo so mache ich das ;)
Text auf ein PNG zeichen ist ja quasi das gleiche.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Seite 2 von 2     12   

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