Partage
  • Partager sur Facebook
  • Partager sur Twitter

GTK +

redimenssionement d une image avec gdk

    19 mai 2018 à 2:04:28

    Bonjour j'essaie de redimensionner mes images avant de les afficher . ce code marche pour tous les .png mais les autres format on dirait que l image n est pas redimentionne du coup ca remplit tout l ecran

      GdkPixbuf *pixbuf;
        pixbuf=gdk_pixbuf_new_from_file_at_scale(filename,320,240,false,NULL);
            gtk_image_set_from_pixbuf(GTK_IMAGE(data),pixbuf);



    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2018 à 18:42:39

      Je ne suis pas une flêche pour Gtk mais sinon j'ai un exemple de zoom comme ceci :

              g_clear_object(&my->pixbuf2) ; // Le pixbuf 2 est celui qui est affiché ( on le déréférence )
      	if(my->pixbuf == NULL) return ; // my est juste un structure utile pour se trimbaler toutes les données dans le programme
      
      	GdkPixbuf *tmp1;
      	tmp1 = my->pixbuf ; // Ce pixbuff est celui chargé depuis le fichier original
      
      	gint x = gdk_pixbuf_get_width (tmp1); //On récupère ces dimensions
      	gint y = gdk_pixbuf_get_height (tmp1); 
      
      	GdkPixbuf *tmp2;
      
      	tmp2 = gdk_pixbuf_scale_simple(tmp1, x * my->scale1_value, y * my->scale1_value, GDK_INTERP_BILINEAR);
              //Ici tmp2 vaudra juste un zoom de scale1_value du pixbuff original
      my->pixbuf2 = tmp2 ; // On le stock dans le pixbuff2 ( il faudra juste penser à afficher le pixbuff2 et non le 1. g_object_unref(tmp1);

      Je charge mes pixbuff comme ceci :

      my->pixbuf=gdk_pixbuf_new_from_file(filename,NULL);
          if(my->pixbuf==NULL)
          {
            printf("Loading Failed : not an image\n");
            //gtk_image_set_from_icon_name(GTK_IMAGE(my->image1),"image-missing",GTK_ICON_SIZE_DIALOG);
          }



      En espérant t'avoir aidé

      -
      Edité par Golgoo 19 mai 2018 à 18:50:54

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2018 à 20:31:11

        le problemme c'est que mon prob dans ton cas c est que tout image png sera zoome mais tout image d un autre format restera inchangee
        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2018 à 20:44:05

          Okok, il te faut juste un boolean qui est stocké a coter du pixbuf1, qui te dit si l'image est png.

          Ensuite une fonction qui va de type void scale_transorm_on_pix2( GdkPixbuf *pixbuff1, GdkPixbuf *pixbuff2, double scale )

          Si le boolean vaut faux, tu appelle la fonction avec le pixbuf de base, le pixbuf2 ( celui que tu vas afficher ) et le zoom 1

          S'il vaut vrai tu l'appelle avec pixbuf de base, pixbuff2 et le zoom souhaité

          Après dans tous les cas, tu n'as qu'à afficher le pixbuff2.

          Pour récupérer si c'est un png : lorsque tu charge ton image il te faut le nom du fichier, lorsque tu le charge dans le pixbuff1, tu regarde les 4 derniers caractère du fichier, sinon il doit peut être y avoir d'autres fonctions ( peut être même en C ) qui permettent de récupérer le type de n'importe quel fichier, mais sinon version simple => tu compare les 4 derniers caractère à ".png" pour mettre le boolean à vrai


          -
          Edité par Golgoo 19 mai 2018 à 20:44:30

          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2018 à 21:00:04

            Bn je vais voir ce que je peux faire merci
            • Partager sur Facebook
            • Partager sur Twitter

            GTK +

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown