AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Auf 32Bit Canvas mit Alphawert zeichnen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Auf 32Bit Canvas mit Alphawert zeichnen ?

Ein Thema von Thebe · begonnen am 10. Mai 2005 · letzter Beitrag vom 10. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Thebe

Registriert seit: 26. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#1

Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 10:59
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 11:44
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
$2B or not $2B
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 12:29
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
  Mit Zitat antworten Zitat
Thebe

Registriert seit: 26. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 13:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 13:51
GR32-Lib, du wirst nie mehr zu TBitmap zurückwollen .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Thebe

Registriert seit: 26. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 22:03
Hab ich soeben ausprobiert.

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

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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 22:25
das einfachste, sichere vorher (nur) den Alphakanal und kopiere ihn dann zurück ins original nach dem die du elipse etc. gepaintet hast.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Thebe

Registriert seit: 26. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 22:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 22:31
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Thebe

Registriert seit: 26. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Auf 32Bit Canvas mit Alphawert zeichnen ?

  Alt 10. Mai 2005, 23:13
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:13 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