Page 1 sur 1
ImageGadget - Charger une image au format PNG
Publié : dim. 11/déc./2005 15:10
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
Publié : dim. 11/déc./2005 15:36
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.

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!
Publié : dim. 11/déc./2005 16:35
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 !
Publié : dim. 11/déc./2005 16:41
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.
Publié : dim. 11/déc./2005 17:12
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
Publié : dim. 11/déc./2005 18:45
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.

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!
Publié : dim. 11/déc./2005 18:59
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.
Publié : dim. 11/déc./2005 20:37
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!
Publié : dim. 11/déc./2005 20:43
par Polo
Je n'ai aucune intention de devoir faire des images spéciales Purebasic pour pouvoir gérer la transparence
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

Publié : dim. 11/déc./2005 21:03
par Progi1984
@Nico, merki beaucoup de ton aide !
Pour l'image, c'est ici :
http://gimp4you.eu.org/img/articles/int ... a1-003.png
Publié : dim. 11/déc./2005 21:04
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
Publié : dim. 11/déc./2005 21:42
par Progi1984
Cela marche parfaitement avec cette fonction CatchTransparentImage() donné ici
http://forums.purebasic.com/english/vie ... php?t=8781
Publié : dim. 11/déc./2005 22:31
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