Petit problème: De manière à améliorer les perfs d’un rendu cartographique, j’ai besoin de créer des layers… En Swing, pas de problème: on a les JLayeredPane… mais en SWT, que neni!

Alors voici une petite astuce pour créer des images transparentes (les fonds de carte n’ont généralement besoin que d’être calculés qu’une seule fois!)

  1. // Définition de LA couleur qui sera considérée comme transparent
  2. Color lTransparentColor = Display.getDisplay().getSystemColor(SWT.COLOR_WHITE);
  3. // On crée une palette avec la couleur transparente et toutes les autres
  4. // couleurs nécessaire à l'image (ici, lOtherColor)
  5. PaletteData lPalette = new PaletteData(new RGB[] {
  6.       lTransparentColor.getRGB(),
  7.       lOtherColor.getRGB()
  8.       });
  9.  
  10. // Création de l'image avec la palette
  11. ImageData lImageData = new ImageData(lWidth, lHeight, 2, lPalette);
  12. // Définition de la couleur transparente de l'image (blanc ici)
  13. lImageData.transparentPixel = lPalette.getPixel(lTransparentColor.getRGB());
  14.  
  15. // Et voilà!
  16. lImage = new Image(lDisplay, lImageData);
  17. Rectangle lImageBounds = lImage.getBounds();
  18. // Le GC qui permet de dessiner dans l'image
  19. GC lGc = new GC(lImage);
  20.  
  21. // Première étape: remplir totalement l'image d'un fond transparent
  22. lGc.setBackground(lTransparentColor);
  23. lGc.fillRectangle(lImageBounds);
  24.  
  25. // Et maintenant, reste plus qu'à dessiner comme avant dans le GC!

C’est un premier pas vers le dessin en layers… J’y reviendrai un peu plus tard avec une petite lib…

Articles Similaires