Créer une Image transparente !

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Créer une Image transparente !

Message par Thyphoon »

J'ai enfin trouvé comment créer une image transparente
je partage le code car je me dis que ça peut servir !

Code : Tout sélectionner

If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")

  If CreateImage(0, 255, 255,32)
   
    StartDrawing(ImageOutput(0))
     *MemoryAddress = DrawingBuffer() 
    FillMemory(*MemoryAddress,DrawingBufferPitch()*ImageHeight(0),RGBA(0,0,0,0),#PB_Long)
    DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
      Box(0,0,100,100,RGBA(255,0,0,255))
    For k=0 To 255
      FrontColor(RGB(k,0, k))  ; a rainbow, from black to pink
      Line(0, k, 255, 0)
    Next

    ;DrawingMode(#PB_2DDrawing_Transparent)
    FrontColor(RGB(255,255,255)) ; print the text to white !
    DrawText(40, 50, "An image created easely...",RGBA(255,255,255,255))

    StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
    
  EndIf
  
 

        
  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Repaint
      StartDrawing(WindowOutput(0))
        DrawAlphaImage(ImageID(0), 20, 10)
      StopDrawing()    
    EndIf
    
  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
  
EndIf

End   ; All the opened 
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Créer une Image transparente !

Message par Ar-S »

j'attendrai la version final de la 4.40 pour m'y mettre serieusement.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

J'aimerais faire la même chose avec les sprites mais ça ne marche pas :(
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: Créer une Image transparente !

Message par flaith »

Bizarre, chez moi je n'ai que le carré rouge et le texte qui s'affichent :?
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

flaith a écrit :Bizarre, chez moi je n'ai que le carré rouge et le texte qui s'affichent :?
c'est normal vu que le donf est transparent .... A oui je comprends pouquoi tu dis ça ! j'ai repris un exemple de la documentation pour travaillé et j'ai pas fait attention que le dégradé qui est prévu dans le code ne s'affiche pas :P

en vérité je pense qu'il y a un bug avec Line car avec LineXY ça fonctionne

Code : Tout sélectionner

    For k=0 To 255
      ; a rainbow, from black to pink
      LineXY(0, k, 255,k, RGBA(k,0, k,255))
      
    Next
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Créer une Image transparente !

Message par Le Soldat Inconnu »

alors dans l'ordre :

le bug avec la ligne, il ne faut pas écrire

Code : Tout sélectionner

Line(0, k, 255, 0)
mais

Code : Tout sélectionner

Line(0, k, 255, 1)
ensuite, l'image transparente. Un poil compliqué je trouve, avec PB4.40 je préfère comme ça (vu dans les exemples de la 4.40) :

Code : Tout sélectionner

CreateImage(0, 100, 100, 32)
StartDrawing(ImageOutput(0))
	; ON dessine juste sur la couche alpha
	DrawingMode(#PB_2DDrawing_AlphaChannel)
	; on met toutes l'image avec un alpha = 0 donc transparent
	Box(0, 0, OutputWidth(), OutputHeight(), 0)
	DrawingMode(#PB_2DDrawing_AlphaBlend)
	; Ton dessin avec couche alpha
	
StopDrawing()
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

Le Soldat Inconnu a écrit :alors dans l'ordre :

le bug avec la ligne, il ne faut pas écrire

Code : Tout sélectionner

Line(0, k, 255, 0)
mais

Code : Tout sélectionner

Line(0, k, 255, 1)
Je viens juste de m'en rendre compte en faisant des tests car je trouvais gros quand même qu'il y ai un bug là et que personne ne l'ai vu et surtout que j'utlise dans mon jeu cette commande et que ça marchait.
Le Soldat Inconnu a écrit : ensuite, l'image transparente. Un poil compliqué je trouve, avec PB4.40 je préfère comme ça (vu dans les exemples de la 4.40) :

Code : Tout sélectionner

CreateImage(0, 100, 100, 32)
StartDrawing(ImageOutput(0))
	; ON dessine juste sur la couche alpha
	DrawingMode(#PB_2DDrawing_AlphaChannel)
	; on met toutes l'image avec un alpha = 0 donc transparent
	Box(0, 0, OutputWidth(), OutputHeight(), 0)
	DrawingMode(#PB_2DDrawing_AlphaBlend)
	; Ton dessin avec couche alpha
	
StopDrawing()
A oui j'avais raté cet exemple ! Merci beaucoup c'est sur que c'est mieux que mon système :P

par contre ce qui est dommage c'est qu'on ne peut pas faire ça avec SpriteOutput()
et pas facile de transformer une image en sprite .... :( la seul solution que j'ai trouvé c'est de sauvegardé dans un fichier temporaire l'image créer et de la charger ensuite en tant que sprite ... :( mais ça tient de la bidouille
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Re: Créer une Image transparente !

Message par kwandjeen »

Dessine sur le sprite, ou alors j'ai pas compris ce que tu voulais faire.

Code : Tout sélectionner

InitSprite()

If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
  OpenWindowedScreen(WindowID(0),0,0,500,300,0,0,0)
  If CreateImage(0, 255, 255, 32)
      StartDrawing(ImageOutput(0))
       ; ON dessine juste sur la couche alpha
       DrawingMode(#PB_2DDrawing_AlphaChannel)
       ; on met toutes l'image avec un alpha = 0 donc transparent
       Box(0, 0, 255, 255, 0)
       DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
      Box(0,0,100,100,RGBA(255,0,0,255))
    For k=0 To 255
      FrontColor(RGB(k,0, k))  ; a rainbow, from black to pink
      Line(0, k, 255, 0)
    Next 
        FrontColor(RGB(255,255,255)) ; print the text to white !
    DrawText(40, 50, "An image created easely...",RGBA(255,255,255,255))
    StopDrawing()
  EndIf
  
  CreateSprite(0,255,255)
  StartDrawing(SpriteOutput(0))
    DrawAlphaImage(ImageID(0),0,0)
  StopDrawing()
       
  Repeat
    EventID = WindowEvent()
   
      ClearScreen(RGB(128,128,128))
      DisplayTransparentSprite(0,10+x,10)  
      If x<250
        x+5
      Else
        x=10
      EndIf
   FlipBuffers()
  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
 
EndIf

End   ; All the opened 

Code : Tout sélectionner

  CreateSprite(0,255,255)
  StartDrawing(SpriteOutput(0))
    DrawAlphaImage(ImageID(0),0,0)
  StopDrawing()
ce n'est pas non plus un si gros code :wink:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

Non ça marche pas .... si je dessine une image avec un fond transparent(alpha) et que je le dessine ensuite sur un sprite je perds alors la transparence du fond (vu que part defaut le sprite a un fond noir opaque). tu vois ce que je veux dire ?
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Re: Créer une Image transparente !

Message par kwandjeen »

Pourtant mon code fonctionne puisque la couleur noire est considéré comme alpha
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

J'avoue que je comprends pas ! Ton code fonctionne effectivement ! J'avais fait le test en intégrand dans mon jeu et j'avais un fond noir opaque.
ça fonctionne tres bien dans ton code et pas dans le miens....pourtant je fais exactement la même chose !
En tout cas merci car effectivement ça marche ... mais pourquoi une fois dans mon jeu ça ne marche plus ... je comprends pas ...

si quelqu'un a une idée là je comprends plus ....

Code : Tout sélectionner

Procedure Init_Obj_HighScore()
  If CreateImage(#Img_HighScore, 255, 255, 32)
    StartDrawing(ImageOutput(#Img_HighScore))
    ; ON dessine juste sur la couche alpha
    DrawingMode(#PB_2DDrawing_AlphaChannel)
    ; on met toutes l'image avec un alpha = 0 donc transparent
    Box(0, 0, 255, 255, 0)
    DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
    Box(0,0,100,100,RGBA(255,0,0,255))
    FrontColor(RGB(255,255,255)) ; print the text to white !
    DrawText(40, 50, "An image created easely...",RGBA(255,255,255,255))
    StopDrawing()
  EndIf
 
  CreateSprite(#Img_HighScore,255,255,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
  StartDrawing(SpriteOutput(#Img_HighScore))
  DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
    DrawAlphaImage(ImageID(#Img_HighScore),0,0)
  StopDrawing()
  CreateSprite3D(#Img_HighScore,#Img_HighScore)  
Endprocedure

;et pour afficher
start3D()
DisplaySprite3D(#Img_HighScore,10,ObjectModeValue(#Obj_HighScore,#Mode_Y))
stop3D()

en convertissant ton code ça marche aussi tres bien avec les sprites 3D ...mais dans mon programme y a rien a faire .... le fond est noir .... :? :|
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

Bon j'ai pas réussi a isolé mon problème !
Si ça amuse certain voici le code source avec le problème

http://9giga.sfr.fr/index.php?m=c9ae77e ... e61246ef15
il faut rentrer dans le repertoire ExtremBrainQuiz puis télécharger Source_ExtrembrainQuizz.zip

le but est d'afficher les scores dans un sprite !

la création de l'image et du sprite ce trouve dans le fichier ObjectData.Pbi ligne 775
la procedure pour l'afficher c'est dans le même fichier juste en dessous 806

cette procedure d'affichage est appelé dans le fichier Main.pb ligne 402
et la procedure qui va créer l'image est appelé dans le fichier network.Pbi ligne 168 juste apres avoir récupéré les infos sur les scores !

voilà, moi je continu a chercher ! si vous avez des questions n'hesitez pas !
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Créer une Image transparente !

Message par Cool Dji »

Hello Thyphoon,

Femme et enfants sont revenus ?
Fini de programmer sans retenue !

Pas facile de débuger les routines
Quand les petits crient des comptines !
Only PureBasic makes it possible
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une Image transparente !

Message par Thyphoon »

Cool Dji a écrit :Hello Thyphoon,

Femme et enfants sont revenus ?
Fini de programmer sans retenue !

Pas facile de débuger les routines
Quand les petits crient des comptines !
Comme tu dis ! j'essaye de profiter de quelques minutes de continues quand je peu mais pas evident lolllllllllll
Pourtant j'essaye de les occuper Image
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Créer une Image transparente !

Message par Cool Dji »

Génial la photo :D
Only PureBasic makes it possible
Répondre