Nicolas Richeton's blog

SWT et redimensionnement d’images

☕️ 1 min read
logo

Des fonctions simples pour les redimensionnement d’images en SWT/jFace :

Il existe 2 techniques :

  • en utilisant ImageData.scaleTo (basse qualité)
  • en utilisant un GC sur une Image et en appelant GC.drawImage (haute qualité)

La deuxième solutions alloue des ressources systèmes, mais bénéficie du coup des accélérations matérielles et du anti-aliasing : Pour définir l’anti-aliasing, utilisez GC.setAntialias(SWT.ON ou SWT.DEFAULT ou SWT.NONE); La qualité se règle avec GC.setInterpolation(SWT.DEFAULT ou SWT.NONE ou SWT.LOW ou SWT.HIGH);

Attention aux valeurs défaut qui ne semble-t-il ne sont pas les même en fonction de la plateforme… En tout cas, sur windows : DEFAULT = NONE.

   /**
   * Returns a new scaled image. new Image must be disposed after use.
   * 
   * @param image
   * @param width
   * @param height
   * @return
   */
   public static Image resize(Image image, int width, int height) {

      if (image == null)
         return null;

      final Image scaled = new Image(Display.getDefault(), width, height);
      GC gc = new GC(scaled);
      gc.setAntialias(SWT.ON);
      gc.setInterpolation(SWT.HIGH);
      gc.drawImage(image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, width, height);
      gc.dispose();

      return scaled;
   }

   public static ImageData resize(ImageData imageData, int width, int height, boolean antiAliasing) {

      if (imageData == null)
         return null;

      if (imageData.width == width && imageData.height == height)
         return imageData;

      if (antiAliasing) {
         Image tmpImage = null;
         Image fullImage = new Image(Display.getCurrent(), imageData);
         ImageData result = null;
         tmpImage = resize(fullImage, width, height);

         result = tmpImage.getImageData();
         tmpImage.dispose();
         fullImage.dispose();
         return result;
      }
      return imageData.scaledTo(width, height);
   }

Je suis sûr que ça pourra aider quelqu’un :-)