OpenWindowedScreen en 32 bits de profondeur ?

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

OpenWindowedScreen en 32 bits de profondeur ?

Message par DjPoke »

Bonjour à tous

Je voudrais savoir s'il existe une astuce pour ouvrir un écran dans une fenêtre, gérant la transparence Alpha.
Le but étant de pouvoir effacer l'écran avec une teinte Alpha égale à zéro, ou au moins une partie.

Il me semble avoir vu que cela est possible en plein écran, mais en mode fenêtré, je n'y arrive pas.
Avatar de l’utilisateur
case
Messages : 1528
Inscription : lun. 10/sept./2007 11:13

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par case »

openwindowedscreen() peut etre ?
ImageImage
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par DjPoke »

C'est exactement ce que j'ai utilisé. (voir le titre...)
Mais le problème, c'est que l'écran ouvert dans la fenêtre n'est pas en 32 bits puisque je ne peux pas le remplir avec la couleur RGBA(0, 0, 0 ,0), par exemple.
Il ne prend pas en compte l'Alpha.

Une idée ?
Avatar de l’utilisateur
case
Messages : 1528
Inscription : lun. 10/sept./2007 11:13

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par case »

tu peux dessiner sur une image et afficher l'image sur ton écran ensuite

Code : Tout sélectionner

InitSprite()
Enumeration
  #main=42 ; HG2G
  #pic
EndEnumeration

OpenWindow(#main,0,0,800,600,"test")
OpenWindowedScreen(WindowID(#main),0,0,800,600)

CreateImage(#pic,800,600,32,0)


StartDrawing(ImageOutput(#pic))
DrawText(10,10,"ceci est un test",$ffffff,$000000)

DrawingMode(#PB_2DDrawing_AlphaBlend) ; <---------------- ne fonctionne que sur un canvas ou une image
Box(0,0,800,600,RGBA(255,255,255,50))

StopDrawing()
StartDrawing(ScreenOutput())
DrawImage(ImageID(#pic),0,0)
StopDrawing()

FlipBuffers()


Repeat
  ev=WaitWindowEvent()
Until ev=#PB_Event_CloseWindow



Dernière modification par case le sam. 08/juil./2017 19:27, modifié 1 fois.
ImageImage
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par Zorro »

en tout cas en direct, ça ne marche pas
et pourtant ça devrai en principe !

dans cet exemple le deuxieme box devrait etre de plus en plus opaque ...
hors, il est opaque sans modification .....
du coup on ne vois pas le premier box
et ceux malgres le Drawingmode(#PB_2DDrawing_AlphaBlend )

Code : Tout sélectionner

#window = 0
#Width = 600
#Height = 600

Enumeration
		#Panel
		#Cont
		#Button
EndEnumeration

;- Initialisation de DirectX
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
		MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
		CloseWindow(#window) : End
EndIf


;- Ouverture de la fenêtre et de l'écran
hwnd = OpenWindow(#window, 0, 0,  #Width, #Height, "",#PB_Window_TitleBar | #PB_Window_ScreenCentered|#PB_Window_SystemMenu  )


OpenWindowedScreen(hwnd , 0, 0, #Width,#Height, 0, 0, 0)


;- début de la boucle
pas=1:alpha2=1
Repeat
		ExamineMouse()  ; on demande a purebasic de surveiller les event de souris !
		ExamineKeyboard() ; on demande a purebasic de surveiller les event de clavier!
		evnt= WindowEvent()
		Delay(2)
		Select    evnt				
				Case #PB_Event_CloseWindow 
				End 
		EndSelect
		alpha2=alpha2+pas
		
		if alpha2>255 or  alpha2<0
				pas=-pas
		Endif
		
		StartDrawing(ScreenOutput())
				
				DrawText(10, 10, "touche ESC pour quitter" ,RGB(255,255,0),RGB(0,0,0))
				Drawingmode(#PB_2DDrawing_AlphaBlend )
				Box(10,100,32,32,rgb(255,0,0))
				Box(10,100,320,200,rgba(255,255,0,Alpha2))   ; <<<<<<<<<<<<ne marche pas !!!
		StopDrawing()
		
		
		FlipBuffers() :ClearScreen($0)
		
		
Until KeyboardPushed(#PB_Key_Escape)

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
case
Messages : 1528
Inscription : lun. 10/sept./2007 11:13

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par case »

DrawingMode(#PB_2DDrawing_AlphaBlend) ; <---------------- ne fonctionne que sur un canvas ou une image
voir la doc

Note: Les modes suivants ne fonctionnent qu'avec ImageOutput() et CanvasOutput(). Ils sont ignorés pour toutes les autres sorties:

#PB_2DDrawing_AlphaBlend
/snip/
#PB_2DDrawing_AlphaChannel
/snip/
#PB_2DDrawing_AllChannels
/snip/
#PB_2DDrawing_Gradient
/snip/
#PB_2DDrawing_CustomFilter
/snip/
ImageImage
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par Zorro »

ben non , c'est pas ecris dans la doc :)

a la fonction c'est ecrit :
Syntaxe

DrawingMode(Mode)
Description

Change le mode d'affichage pour les textes et les dessins.

hors, que je sache, le fait de dessiner sur l'ecran c'est quand meme la base du dessin non ?

a moins qu'il y ai une difference avec Directx , mais pourtant, ça marche bien avec les Sprites
cette affaire de transparence , il me semble que c'etait meme la grande nouveauté de la Version 4.00 de Purebasic


[reedit apres avoir lu ton complement de message]
ha oui, c'est ecrit au milieu effectivement ....

c'est quand meme tres "limitatoire " :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
case
Messages : 1528
Inscription : lun. 10/sept./2007 11:13

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par case »

lis plus bas dans la partie arguments

j'ai pas inventer mes copier coller de la doc :)


edit :
oui bon ben on vas pas y passer la nuit a se quoter ^^
Dernière modification par case le sam. 08/juil./2017 19:40, modifié 3 fois.
ImageImage
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: OpenWindowedScreen en 32 bits de profondeur ?

Message par Zorro »

Zorro a écrit :
[reedit apres avoir lu ton complement de message]
ha oui, c'est ecrit au milieu effectivement ....

c'est quand meme tres "limitatoire " :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre