Pixmaps Transparent, aber wie?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Bob

Betreff: Pixmaps Transparent, aber wie?

BeitragMo, Dez 04, 2006 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich versuch mich grade am friscch erworbenen MaxGui Modul.
Ich versuche nun auf einem Canvas eine PixmAp zu zeichnen deren Farbe 255,0,255 Transparent sein soll.

Dazu habe ich die Pixmap erstmal geladen und anschliessend mit
MaskPixmap die Farbe ausgeblendet.
Als ergebniss wird nun die maskierte Farbe mit schawrz eingezeichnet. Na Toll

1. Wie bekomme ich die Farbe also komplett transparent?

2. Mit images zu arbeiten wäre mir eh viel lieber. Geht das?
 

Dreamora

BeitragMo, Dez 04, 2006 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Mit Images arbeiten ist möglich, einfach LoadImage machen und das Pixmap angeben

2. In BlitzMax bringt es prinzipiell nichts wenn du lädst etc und dann etwas mit Set festlegst. Set wirkt sich nur auf darauf folgende Operationen aus, nicht auf Dinge die schon geschehen sind.

Masking: ich nehme zwar an, dass ist bekannt, aber wenn du JPG nutzt gibt es kein Masking oder dergleichen, da JPG keine fixen Farbwerte gespeichert haben.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Bob

BeitragMo, Dez 04, 2006 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Antwort.

Leider schient auch das Laden von Images, nutzlos in Bezug auf Transparenz, zu sein.
Da ich ja nicht zuvor mittels Graphics 800,600 oder so
arbeite scheint der Befehl setMaskColor ohne Wirkung zu sein.

Zu 2.
Bisher hatte ich noch keinen Befehl mit "Set" irgendwo aufgerufen.
(ausser bei setlayout).

Das Problem bleibt also weiterhin.

Wie bekomme ich eine bestimmte Farbe eines Images oder Pixmap
(mir vollkommen Wurst) Transparent auf ein Canvas eingezeichnet.
(bzw. eben nicht Eingezeichnet)

Hast du noch nen Tip?
Danke

FOODy

BeitragMo, Dez 04, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist jetzt ne Blöde Frage, aber hast du SetMaskColor auch nach SetGraphics geschrieben?
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB

Bob

BeitragMo, Dez 04, 2006 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe überhaupt nicht irgendwo SetGraphics geschrieben.
Bisher waren alle Beispiele die ich mir zu MaxGui angeschaut habe frei von irgendwelchen graphics aufrufen, bis natürlich an den stellen wo ein Canvas geupdtaet werden soll.

FOODy

BeitragMo, Dez 04, 2006 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst aber ein SetGraphics um auf den Canvas zu zeichnen ;D
Bzw. SetGraphics<>Graphics

Also bei mir geht es Very Happy

Hier mal eine bearbeitete Version von dem Canvasbeispiel:
Code: [AUSKLAPPEN]

' createcanvas.bmx

Strict

Global GAME_WIDTH=320
Global GAME_HEIGHT=240

' create a centered window with client size GAME_WIDTH,GAME_HEIGHT

Local wx=(ClientWidth(Desktop())-GAME_WIDTH)/2
Local wy=(ClientHeight(Desktop())-GAME_HEIGHT)/2

Local window:TGadget=CreateWindow("My Canvas",wx,wy,GAME_WIDTH,GAME_HEIGHT,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS)
' create a canvas for our game

Local canvas:TGadget=CreateCanvas(0,0,320,240,window)

'###################################
'###################################
SetGraphics CanvasGraphics(canvas)
SetMaskColor(255,0,255)
Local image:TImage = LoadImage("test.bmp")
'###################################
'###################################
' create an update timer

CreateTimer 60

While WaitEvent()
   Select EventID()
      Case EVENT_TIMERTICK
         RedrawGadget canvas

      Case EVENT_GADGETPAINT
         SetGraphics CanvasGraphics(canvas)
         SetBlend ALPHABLEND ' Damit die Maske ne wirkung hat
         Cls
            SetColor 255,255,0
            DrawRect 12,12,48,48
            SetColor 255,255,255
            DrawImage image,48,48
         Flip

      Case EVENT_WINDOWCLOSE
         FreeGadget canvas
         End

      Case EVENT_APPTERMINATE
         End
   End Select
Wend


Für test.bmp irgendein bild. (hier ist die Maskfarbe 255,0,255)


Gruß,
FOODy
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB

Bob

BeitragMo, Dez 04, 2006 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Du brauchst aber ein SetGraphics um auf den Canvas zu zeichnen ;D


Na hab ich doch oben erwähnt das ich das tue wens an den Canvas geht.

Seis drum. Dein Beispiel hat mir verdeutlicht wie es gemacht wird.
Danke.

Der entschidende Punkt war also nach dem ersellen des Canvas diesen dierekt danach mittels SetGraphics CanvasGraphics(canvas)
zu aktivieren. Dann erst die Images laden.

Jetzt klappt es.
Im Übrigen kan ich auch auf SetBlend ALPHABLEND verzichten.
Es ist auch ohn den Aufruf transparent.
 

Dreamora

BeitragMo, Dez 04, 2006 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Alphablend wird nur für richtiges Alpha benötigt.
Normalerweise ist MaskBlend ausreichend. das es sonst auch transparent ist, wäre mir neu. Vielleicht einfach nur die gleiche hintergrundfarbe wie der Canvas, weswegen es nicht auffällt?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Bob

BeitragDi, Dez 05, 2006 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@ dreamora

Ja. Ist schon etwas seltsam aber ich verwende keinen BlendMode.
Weder Alpha noch Mask.
Ich habe im Hintergrund mal ein farbiges Rect. gezeichnet und das darüberligende Image ist Tatsächlich Taransparent.
Vielleicht ist MaskBlend per default an.
 

Dreamora

BeitragDi, Dez 05, 2006 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann sein. Früher wars glaub SolidBlend.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group