Page 1 sur 1

Pour retailler une image au format icône

Publié : mer. 08/juin/2011 12:02
par pat
Bonjour,

J'ai remarqué, comme beaucoup, que la fonction Resize(...) ne fonctionne pas avec les images de type icône (d'ailleurs vous aurez une erreur de PB qui l'indiquera).
Alors je me suis dis comment faire pour retailler quand même l'image icône.
Eh bien l'API Copyimage_(handledel'image,largeur,hauteur) fait parfaitement l'affaire.
Par contre, cette fonction ne fonctionne pas sur d'autres types d'image, mais comme Resize(...) fonctionne bien, alors nous avons tout ce qu'il nous faut.
Comme quoi les API sont devenus indispensables.

Re: Pour retailler une image au format icône

Publié : mer. 08/juin/2011 13:36
par Ar-S
Tu nous montrerais un petit exemple, ce serait pas mal.
J'ai commencé à faire ça mais je ne sais pas comment continuer.

Code : Tout sélectionner

#IMAGE_BITMAP=0
#IMAGE_CURSOR=2
#IMAGE_ICON=1
#LR_DEFAULTSIZE=$00000040 

iconfile=LoadImage(0,"F:\Pics\Icones\icone_ldvm.ico")
Copyimage_(iconfile,#IMAGE_ICON,100,100,#LR_DEFAULTSIZE)

Re: Pour retailler une image au format icône

Publié : mer. 08/juin/2011 22:26
par Le Soldat Inconnu
pourquoi ne pas dessiner l'icône dans une image 32 bit de la même taille ?

Ensuite, tu as accès à toutes les fonctions PB sur ton icône, y compris la fonction resize

Re: Pour retailler une image au format icône

Publié : mar. 14/juin/2011 13:17
par pat
Bonjour,

J'ai effectivement réussi à faire ça mais comme je ne suis pas chez moi, il faudra attendre quelques jours afin que je mette en place un programme spécifique pour l'exemple (car mon programme source est trop long et compliqué) et il faudra aussi que je le sorte sur imprimante et le tape dans le forum.
Mais étant donné que vous êtes tous les deux de véritables experts vous trouverez ça très simple, mais le principal c'est que cela fonctionne.

Re: Pour retailler une image au format icône

Publié : mer. 15/juin/2011 11:24
par pat
Bonjour,

Comme prévu voici le programme :

Code : Tout sélectionner

If OpenWindow(0,0,0,600,600,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 ButtonGadget(0,10,20,190,25,"Choisissez un fichier")
 ImageGadget(4,84,150,30,30,#Null)
 largeur=300 ;ici la largeur de l'image que l'on désire
 hauteur=300 ;ici la hauteur de l'image que l'on désire
 Repeat
  Event=WaitWindowEvent()
  If Event=#PB_Event_Gadget
   Select EventGadget()
    Case 0
    ad$=OpenFileRequester("Choisissez un fichier","","Fichiers icône(*.ico)|*.ico",0)
    If ad$
      LoadImage(15,ad$)
      handle=CopyImage_(ImageID(15),#IMAGE_ICON,largeur,hauteur,0)
      SetGadgetState(4,handle)
    Endif
   EndSelect
  Endif
 Until Event=#PB_Event_CloseWindow
Endif
Comme vous le savez sans doute, CopyImage_(...) accepte les icônes mais pas tous les fichiers (par exemple il y aura une erreur si vous charger une image .jpg ou .jpeg).
Egalement, une image icône ne peut dépasser 256 X 256 pixels mais le programme ci-dessous palie cet inconvénient.
En fait, mieux vaut ne pas trop s'écarter de la taille de l'image de base car, effet bien connu, il y aura un risque de pixélisation car CopyImage_(...) se comporte comme un zoom.
Et comme je l'ai dit plus haut, la commande PB resize(...) fonctionne avec tout sauf pour les icônes et inversement pour CopyImage_(...). Donc on a tout ce qu'il nous faut.

Re: Pour retailler une image au format icône

Publié : mer. 15/juin/2011 12:13
par Ar-S
Merci pat pour ce code, pourrais tu penser à utiliser les balises code /code pour encadrer ton code, cela évite les erreurs de bbcode et améliore la lisibilité.

Re: Pour retailler une image au format icône

Publié : jeu. 16/juin/2011 13:14
par pat
J'ai effectivement oublié de le faire car je ne suis pas trop habitué.
J'essaierai de le faire la prochaine fois.

Re: Pour retailler une image au format icône

Publié : mar. 21/juin/2011 13:31
par pat
Bonjour,

Une petite précision, pour le programme ci-dessous.
Pour ceux dans leur programme qui n'utiliseront plus l'image, mieux vaut donc mettre ceci :
SetGadgetState(4,handle):DestroyIcon(handle)
Très important le DestroyIcon afin de pouvoir libérer les ressources de l'ordinateur.

Re: Pour retailler une image au format icône

Publié : mar. 21/juin/2011 14:25
par Ar-S
Merci pour la précision et l'edition du code ;)