ImageGadget - Charger une image au format PNG

Programmation d'applications complexes
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

ImageGadget - Charger une image au format PNG

Message par Progi1984 »

Voilà, j'utilise un imagegadget. je charge une image PNG avec transparence dans celui ci.

Mais il m'affiche mon image, avec du noir à la place de la transparence.

Comment puis je remédier à cela ?

Merci
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Purebasic ne charge pas la transparence des images.
C'est quelque chose qui m'énerve pas mal, et si Fred n'ajoute pas ça dans PB4.0, j'ai bien peur de devoir laisser tomber Pure, ça fait plus de 3 ans qu'on demande ça.
:lol: c'est marrant de voir des gens se bloquer pour si peu, mais bon j'étais pareil au début.

C'est là où la connaissance des API fait la différence car créer un masque à partir d'une couleur se fait en deux lignes via les imagelists!
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

y a pas un moyen ?

Genre définir une couleur que l'on veut transparente !

Puis créer une fonction qui va transformer la couleur dite de transparence en couleur de l'écran de fond !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Si, ça tu peux le faire, ça ne sera pas de la transparence, mais ça dépanne. Par contre, sur un fond en dégradé, par exemple, tu risques d'avoir un problème.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Progi1984 a écrit :y a pas un moyen ?

Genre définir une couleur que l'on veut transparente !

Puis créer une fonction qui va transformer la couleur dite de transparence en couleur de l'écran de fond !
Va voir le message ici avec d'exellents codes de Danilo pour la transparence

Adaptes pour ton besoin

http://forums.purebasic.com/english/vie ... php?t=8781
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Purebasic ne charge pas la transparence des images.
C'est quelque chose qui m'énerve pas mal, et si Fred n'ajoute pas ça dans PB4.0, j'ai bien peur de devoir laisser tomber Pure, ça fait plus de 3 ans qu'on demande ça.
:lol: c'est marrant de voir des gens se bloquer pour si peu, mais bon j'étais pareil au début.

C'est là où la connaissance des API fait la différence car créer un masque à partir d'une couleur se fait en deux lignes via les imagelists!
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

J'aime beaucoup ton "si peu", tu ne dois pas savoir de quoi tu parles :)
Le "si peu" bloque "un peu" la réalisation de mon projet, et devoir bidouiller pour quelque chose qui fait parti des trucs de bases...
Et les astuces avec les api, vous vous les garder, merci :)
Je parlais notamment de charger la couleur transparente de l'image, ce qu'on ne peut évidemment pas faire avec les api, puisqu'elle est contenue dans le fichier image.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Et les astuces avec les api, vous vous les garder, merci
ben oui mais tu comptes sur des gens qui les connaissent pour te faire des libs que tu utiliseras, non?
Je parlais notamment de charger la couleur transparente de l'image, ce qu'on ne peut évidemment pas faire avec les api, puisqu'elle est contenue dans le fichier image.
Tu peux facilement changer la couleur de transparence en la modifiant directement dans le fichier image, c'est juste une information qui dit au prog, ben voilà cette couleur tu me la rends transparente.

Pure basic ne le prend pas en compte mais comme je l'ai dis, ce n'est pas compliqué à faire et ça marchera avec les jpeg et les autres formats que gère PB.

Tu comprends maintenant qu'il n'est pas utile d'utiliser spécialement le format PNG pour faire de la transparence!


Progi1984,

Si t'as une image PNG dont tu veux modifier la couleur de fond, passe la moi, je te ferais un exemple!
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Je n'ai aucune intention de devoir faire des images spéciales Purebasic pour pouvoir gérer la transparence :lol:
Et je n'ai également aucune intention d'utiliser une lib de plus pour faire ce genre de choses qui devraient être nativement dans Pure, et ce depuis longtemps.
ça fait combien de tps que Blitz gère ça ?
S'il y a bien quelque chose que je n'aime pas avec le Pure, c'est que des qu'on utilise les commandes, on a forcément à bidouiller.
Heureusement que le compilateur rattrape tout :)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

@Nico, merki beaucoup de ton aide !

Pour l'image, c'est ici : http://gimp4you.eu.org/img/articles/int ... a1-003.png
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Un peu d'accord avec Polo.

Le png à une couleur transparente qui est spécifiee par le créateur de l'image, et c'est à PureBasic de s'y adapter.
C'est pas l'image qui doit s'adapter au programme mais le contraire
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Cela marche parfaitement avec cette fonction CatchTransparentImage() donné ici http://forums.purebasic.com/english/vie ... php?t=8781
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il y a pleins de chose que PB ne fait pas et qu'on est obligé de faire en attendant qu'il l'intègre. Je n'ai jamais dit que PB ne devait pas gérer le PNG avec la transparence.

Code : Tout sélectionner

UsePNGImageDecoder()

Procedure Transparent_Image(ID.l,OldColor.l,NewColor.l)
     If NewColor=-1
          NewColor = GetSysColor_(#COLOR_BTNFACE)
     EndIf      
     UseImage(ID)
     himl=ImageList_Create_(ImageWidth(), ImageHeight() , #ILC_COLOR24 | #ILC_MASK, 0, 0)
     ImageList_AddMasked_( himl, UseImage(image), OldColor)
     index=CreateImage(#PB_Any,ImageWidth(), ImageHeight())
     If index
          hdc=StartDrawing(ImageOutput())
          If hdc 
               Box(0, 0, ImageWidth(), ImageHeight() , NewColor)
               ImageList_Draw_(himl,0,hdc,0,0,#ILD_TRANSPARENT)
               StopDrawing()
          EndIf 
     EndIf 
     ImageList_Destroy_(himl)
     ProcedureReturn index
EndProcedure 

LoadImage(0,"c:\thumb-final-a1-003.png")

OpenWindow(0,0,0,600,400,#PB_Window_SystemMenu,"") 
CreateGadgetList(WindowID(0))
ID_image=Transparent_Image(0,0,-1)
ImageGadget(0,0,0,0,0,UseImage(ID_image))

Repeat 
     event=WaitWindowEvent() 
Until event=#PB_EventCloseWindow 
End 
Répondre