Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Auf 32Bit Canvas mit Alphawert zeichnen ? (https://www.delphipraxis.net/45658-auf-32bit-canvas-mit-alphawert-zeichnen.html)

Thebe 10. Mai 2005 09:59


Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Hi!

Ich arbeite momentan mit 32bit Bitmaps die einen Alpha Channel haben. Nun hab ich leider das Problem, wenn ich mit den Standart TCanvas Zeichenoperationen zeichne (TextRect, Ellipse, FrameRect etc.), dann ist der Alpha Wert an den Stellen wo gezeichnet wurde grundsätzlich 0. Sprich wenn ich dann die Bitmap weiterbenutze um sie per AlphaBlendung woanders drauf zu zeichnen, sind diese Stellen grundsätzlich durchsichtig.

Ich hab schon probiert bei TColor das höchstwertige Byte dem Alpha Wert zuzuweisen, aber das höchstwertige Byte bei TColor ist ja leider für solche Sachen wie Paletten Optionen reserviert.

Nun ist die Frage wie ich das umgehen kann, das diese Stellen mir immer durchsichtig werden. Das Bitmap wo ich drauf zeichne kopieren und dann die alten Alphawerte gegenchecken bringt nichts, da ich auch an Stellen zeichnen möchte wo im original Bitmap schon der Alpha Wert 0 ist. Und die kompletten Proceduren selbst zu schreiben wird wohl oder übel ziemlich lange dauern und auch ziemlich langsam sein.

Habt ihr ne Ahnung was man da machen könnte ? Ich wollt eigentlich nur im extremen Notfall auf externe Units zugreifen.

Schon mal vielen Dank.

- Thebe

himitsu 10. Mai 2005 10:44

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Da die von TCanvas gekapselten Funktionen nur mit den 24-Bit-Werten (RGB) arbeiten, kannst du die TCanvas in dieser Richtung vergessen.

Also entweder nimmst du 'ne Klasse eines anderen Anbieters (allerdings kenn ich da keine),
oder du greifst direkt die GDI-Funktionen von Windows zu (im MSDN sollte da einiges u finden sein).



Natürlich könnte ja auch mal jemand die TCanvas und seine Verwandten etwas überarbeiten, so dass es auch mal damit möglich ist :roll:

Muetze1 10. Mai 2005 11:29

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Moin!

Wenn du über die ScanLine[] Eigenschaft des TBitmaps auf die Pixeldaten zugreifst, dann kannst du den Alpha-Channel Wert direkt lesen/beschreiben.

MfG
Muetze1

Thebe 10. Mai 2005 12:47

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Würde aber wiederrum beinhalten das ich die Funktionen wie Line / Ellipse etc. selbst schreiben müßte, da ich keine Chance hab herauszukriegen auf welche Pixel jene Funktionen geschrieben haben.

Khabarakh 10. Mai 2005 12:51

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
GR32-Lib, du wirst nie mehr zu TBitmap zurückwollen :wink: .

Thebe 10. Mai 2005 21:03

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Hab ich soeben ausprobiert.

Wenn Du mir erzählst wie man folgendes mit der G32 realisiert kannst mich überzeugen.

Delphi-Quellcode:
AnyBMP.Handle := AnyIconInfo.hbmColor.Handle;
Assign klappt nicht, da ich nur ein Handle hab. Und das oben gepostete klappt auch nicht, weil beim Bitmap32 die Handle Eigenschaft read-only ist...

- Thebe

SirThornberry 10. Mai 2005 21:25

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
das einfachste, sichere vorher (nur) den Alphakanal und kopiere ihn dann zurück ins original nach dem die du elipse etc. gepaintet hast.

Thebe 10. Mai 2005 21:27

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Wie schon oben gesagt, funktioniert auch nicht da ich teilweise auf ein Areal zeichnen möchte wo der Alpha Wert 0 ist. Wenn ich da was sicher isses zwar schön und gut, aber angezeigt nach AlphaBlend wird es mir auch nicht.

SirThornberry 10. Mai 2005 21:31

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
versteh ich nicht, dich stört das beim zeischnen der Elipse der Alphakanal geändert wird. Was hindert dich also daran
-Alpha sichern
-Elipse zeischnen
-Alpha zurücksetzen
da ist es doch egal was vor und nach dem ganzen mit dem alphakanal passiert.

Thebe 10. Mai 2005 22:13

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?
 
Nicht nur das der Alpha Wert auf 0 runter gesetzt wird, sondern auch daß er nicht von 0 auf was anderen hoch gesetzt wird. Ich würde z.b. gerne um meine Bitmaps herum Ellipsen zeichnen (die dynamisch groß sein sollten), das kann ich nur knicken weil die gar nicht angezeigt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Seite 1 von 2  1 2      

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