Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Canvas mit Alphakanal in Delphi 5 (https://www.delphipraxis.net/152424-canvas-mit-alphakanal-delphi-5-a.html)

RSE 22. Jun 2010 13:56

Canvas mit Alphakanal in Delphi 5
 
Hallo,

ich zeichne Text auf ein Canvas (momentan TBitmap.Canvas) und kopiere es anschließend mit Canvas.Draw dort hin, wo es hin soll. Ein direktes Zeichnen auf das Ziel kommt nicht in Frage. Das Vorgehen funktioniert super für Rasterfonts, aber TrueType Fonts haben ja Farbübergänge an den Buchstabenrändern, so dass ich mit einer einzigen transparenten Farbe nicht auskomme. In neueren Delphi-Versionen gibt es da wohl TPNGImage, aber das gibt es eben in Delphi 5 noch nicht.

Was habe ich für Möglichkeiten?

Uwe Raabe 22. Jun 2010 14:19

AW: Canvas mit Alphakanal in Delphi 5
 
PNGImage gab es auch mal für Delphi 5, ist aber aus lizenzrechtlichen Gründen nicht mehr öffentlich verfügbar.

Eventuell helfen dir die LMD Tools weiter, aber die kenne ich auch nicht so genau.

Meine persönliche Empfehlung: Auf Delphi 2010 updaten :-D

Bernhard Geyer 22. Jun 2010 14:23

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1030869)
PNGImage gab es auch mal für Delphi 5, ist aber aus lizenzrechtlichen Gründen nicht mehr öffentlich verfügbar.

Die alte Version die damals verfügbar war darfst du auch heute noch verwenden. Musst nur schauen wo du diese im Internet noch findest.

Zitat:

Zitat von Uwe Raabe (Beitrag 1030869)
Eventuell helfen dir die LMD Tools weiter, aber die kenne ich auch nicht so genau.

Die LMD-Kompnenten setzen mittlerweile auch schon D6 vorraus. Aber dort gibt es eine Version der Kompos bei denen gegenüber der letzten Freien Version einige Fehler behoben wurden.

DeddyH 22. Jun 2010 14:27

AW: Canvas mit Alphakanal in Delphi 5
 
Oder einfach mal bei Torry schauen.

Uwe Raabe 22. Jun 2010 15:35

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von DeddyH (Beitrag 1030871)
Oder einfach mal bei Torry schauen.

Ich habe mir angewöhnt, derartige Links nicht mehr offiziell zu posten, aber offensichtlich war Embarcadero noch nicht in der Lage, diesen Download zu beseitigen.

Interessanterweise ist die PNGImage auch erst ab D6 gelistet.

Bernhard Geyer 22. Jun 2010 15:47

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1030879)
Ich habe mir angewöhnt, derartige Links nicht mehr offiziell zu posten, aber offensichtlich war Embarcadero noch nicht in der Lage, diesen Download zu beseitigen.

Die zentrale Unit (PNGImage.pas) ist von 2004! Da sind noch einige Fehler drin (z.B. Ressourcenleaks mit übelsten Effekten unter Win9x, Probleme bei Transparenz, Absturz Paletten-PNG's, ...)

Namenloser 22. Jun 2010 15:56

AW: Canvas mit Alphakanal in Delphi 5
 
:arrow: Graphics32

@Bernhard: Kennst du denn was besseres als PNGImage.pas (V1.564)? Wäre sehr dran interessiert, weil ich aktuell auch das Problem habe, dass die Komponente beim Laden eines bestimmten PNGs abstürzt (andere Programme haben keine Probleme damit).

Bernhard Geyer 22. Jun 2010 16:03

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von NamenLozer (Beitrag 1030881)
:arrow: Graphics32

@Bernhard: Kennst du denn was besseres als PNGImage.pas (V1.564)? Wäre sehr dran interessiert, weil ich aktuell auch das Problem habe, dass die Komponente beim Laden eines bestimmten PNGs abstürzt (andere Programme haben keine Probleme damit).

Ja habe ich, sind aber Bestandteil der Units von LMD. LMD's PNG-Implementierung basiert auf der der Freien PNG-Implementierung. Die haben sich (vor dem Codegear-Kauf) die Rechte zur Verwendung in der eigenen Komponentensammmlung ohne offenlegung der Sourcen gekauft. Da kann ich dir jetzt schlecht diese Sourcen geben (müsste auch im SVN-Zugang nachschauen was genau angepasst wurde).

himitsu 22. Jun 2010 16:05

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1030879)
Ich habe mir angewöhnt, derartige Links nicht mehr offiziell zu posten, aber offensichtlich war Embarcadero noch nicht in der Lage, diesen Download zu beseitigen.

Einmal vergebene Lizenzen können nicht so einfach geändert werden.
Was also damals Freeware war, ist es auch jetzt noch.

Embarcadero/CodeGear hat nur die Rechte für eine Weiterentwicklung der damaligen Komponente übernommen/erhalten.
Die alte freie Version geht diese also garnichts an
und man kann diese somit problemlos verwenden.

Uwe Raabe 22. Jun 2010 16:37

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von himitsu (Beitrag 1030885)
Einmal vergebene Lizenzen können nicht so einfach geändert werden.
Was also damals Freeware war, ist es auch jetzt noch.

Embarcadero/CodeGear hat nur die Rechte für eine Weiterentwicklung der damaligen Komponente übernommen/erhalten.
Die alte freie Version geht diese also garnichts an
und man kann diese somit problemlos verwenden.

Gegen verwenden habe ich auch gar nichts gesagt, das tue ich selber für <D2009. Das Problem ist das öffentliche Verbreiten. Siehe dazu hier

Bernhard Geyer 22. Jun 2010 17:19

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1030887)
Das Problem ist das öffentliche Verbreiten. Siehe dazu hier

Ist es eigentlich nicht. Hier ist Codegear anmaßend.

Auszug aus der ursprünglichen Lizenz:
Zitat:

This component may be distributed freely over the internet only when containing the exact same files from the original packaging.

RSE 22. Jun 2010 17:21

AW: Canvas mit Alphakanal in Delphi 5
 
Ich möchte das mal zusammenfassen:

TPNGImage ist als Komponente verfügbar, die in einer alten Version auch unter Delphi 5 lauffähig ist. Sie ist aber auch in neueren Versionen noch, speziell im Bereich Transparenz, verbuggt. -> würd ich somit nicht unbedingt bevorzugen

LMDTools könnte da auch was bieten. Wir setzen auch LMDTools ein, sicherlich eine alte Version, die würde sich bestimmt nicht mit der neuen vertragen. Wenn es die angesprochene Lösung also in unserer alten Version nicht gibt, fällt das auch weg.

Ich werde den beiden Ansätzen morgen mal nachgehen. Um das aber noch mal ausdrücklich zur Sprache zu bringen: Ich brauche kein PNG, sondern lediglich einen Grafikpuffer (bevorzugt ein Canvas) mit Alphakanal, den ich zum Schluss mit Transparenz-Kanal auf mein Ziel-Canvas kopieren kann.


Schönen Feierabend!

Bernhard Geyer 22. Jun 2010 17:24

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von RSE (Beitrag 1030893)
LMDTools könnte da auch was bieten. Wir setzen auch LMDTools ein, sicherlich eine alte Version, die würde sich bestimmt nicht mit der neuen vertragen. Wenn es die angesprochene Lösung also in unserer alten Version nicht gibt, fällt das auch weg.

Mann kann versuchen (wenn man Lizenz für neue LMD-Kompos hat) das PNG-Image wieder unter D5 lauffähig zu machen.

Namenloser 22. Jun 2010 17:25

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von RSE (Beitrag 1030893)
Ich werde den beiden Ansätzen morgen mal nachgehen. Um das aber noch mal ausdrücklich zur Sprache zu bringen: Ich brauche kein PNG, sondern lediglich einen Grafikpuffer (bevorzugt ein Canvas) mit Alphakanal, den ich zum Schluss mit Transparenz-Kanal auf mein Ziel-Canvas kopieren kann.

Wie gesagt, Graphics32. Ist genau das.

SirThornberry 22. Jun 2010 21:50

AW: Canvas mit Alphakanal in Delphi 5
 
Was hat das ganze eigentlich mit dem Alphakanal von TCanvas zu tun? Auch durch TPNGImage wird sich da nichts ändern. TCanvas ist zu vergleichen mit einem Blatt Papier. Da gibt es keine halbtransparenten Farben. Was drauf gemalt ist, ist draufgemalt und kann nur übermalt werden.
Was genau ist denn dein Ziel? Text den du auf einen Hintergrund mit FarbeX geschreiben hast dort runter zu nehmen und dann auf einen bunten Hintergrund schreiben wobei der Farbeeinfluss von FarbeX gleich 0 sein soll?
Der richtige weg wäre hier wohl einfach den Hintergrund wo die Schrift später drauf soll auf dein Canvas zu kopieren bevor du darauf schreibst. Und anschließend kannst du das ganze komplett (also mit Schrift) zurück kopieren.

RSE 23. Jun 2010 08:40

AW: Canvas mit Alphakanal in Delphi 5
 
Zitat:

Zitat von SirThornberry (Beitrag 1030917)
Der richtige weg wäre hier wohl einfach den Hintergrund wo die Schrift später drauf soll auf dein Canvas zu kopieren bevor du darauf schreibst. Und anschließend kannst du das ganze komplett (also mit Schrift) zurück kopieren.

Das ist der einfache Weg, auf den ich nicht gekommen bin. Klingt im ersten Moment super. Im zweiten Moment fällt mir allerdings ein, dass ich gelegentlich schon gezeichnete Schrift noch mal verschieben muss auf meinem Canvas... da bräucht ich dann doch wieder Transparenz. Die Position der Schrift ist bei ihrem Zeichnen noch nicht 100%ig.

Ich werde mir als erste Amtshandlung mal Graphics32 ansehen.

[edit]Wenn ich davon ausgehe, dass TBitmap32.RenderText die Position und Dimensionen der Schrift nicht anders berechnet als die Win32-API-Funktion DrawText, dann ist das durchaus nutzbar für meine Zwecke. Die Frage ist allerdings, wie bekomme ich das Ganze zum Schluss zurück auf mein Canvas? Meine momentan einzige Idee wäre:

-zweites Bitmap32 instanzieren
-Hintergrund vom Canvas in das zweite Bitmap32 laden
-erstes Bitmap32 transparent drüberzeichnen
-Canvas vom zweiten Bitmap32 zurück auf Canvas kopieren

Sehe ich das richtig?[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz