2010-09-09 18 views
2

J'implémente un diagramme qui montre le niveau d'un conteneur. Selon le niveau de remplissage, la couleur de la ligne devrait changer (par exemple, proche du maximum, elle devrait apparaître en rouge). Plutôt que de calculer différents segments de la ligne et de définir leurs couleurs manuellement, je voudrais définir un groupe dans lequel la couleur change automatiquement. J'ai pensé faire cela avec un Composite/CompositeContext personnalisé, mais il semble que je ne sois pas capable de trouver les emplacements des pixels retournés par le raster. Mon idée est de vérifier leurs valeurs y et de changer la couleur si une valeur de couleur est définie dans la source et si la valeur y dépasse une valeur de seuil.Java: Composite

Mon CompositeContext ressemble à ceci:

CompositeContext context = new CompositeContext() { 

    @Override 
    public void compose(Raster src, Raster dstIn, WritableRaster dstOut) { 
     int width = Math.min(src.getWidth(), dstIn.getWidth()); 
      int height = Math.min(src.getHeight(), dstIn.getHeight()); 

      int[] dstPixels = new int[width]; 

      for (int y = 0; y < height; y++) { 
      dstIn.getDataElements(0, y, width, 1, dstPixels); 
      for (int x = 0; x < width; x++) { 
       if (y ??? > 50) { 
       dstPixels[x] = 1; 
      } else { 
        // copy pixels from src 
       } 
     } 
     dstOut.setDataElements(0, y, width, 1, dstPixels); 
    } 

}

« y » semble être lié à quelque chose, mais il ne contient pas la valeur y absolue (en fait la méthode de composition est appelée plusieurs fois avec des rasters 32x32). Peut-être que quelqu'un sait comment récupérer la position sur le composant ou même une meilleure façon de définir une zone dans laquelle une valeur de pixel donnée est remplacée par une autre valeur.

Répondre

0

Ne pouvez-vous pas remplir un dégradé avec 0 alpha, puis dessiner la ligne avec alpha complet?

+0

Merci pour le commentaire. Je pourrais aussi mettre en place un peintre. La méthode getRaster (int x, int y, int w, int h) semble parfaitement convenir. y devrait fournir la valeur que je cherche pour déterminer la taille et la couleur. – Max