Manipuler des images

L’application des filtres

  • Controle des pixels : BufferedImage
  • Transformation des images : héritage de BufferedImageOp (AffineTransformOp, RescaleOp, LookupOp, ColorConvertOp, ConvolveOp)
  • Création : new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
  • WritableRaster permettant la manipulation des pixels image.getRaster
  • raster.setPixel(i,j, {r, v, b, alpha});
  • raster.setPixels(i, j, width, height, {r, v, b, alhpa});
  • raster.getPixel(i, j, destination); Destination est un tableau d’entiers définissant la couleur comme ci-dessus.
  • Effectuer des transformations en mode RGB : image.getcolorModel().getRGB(raster.getDataElements(x, y, null))

Exemple : la rotation

AffineTransform t = AffineTransform.getrotateinstance(Math.toRadian(angle), centreX, centreY)
AffineTransformOp op = new AffineTransformOp(t, AffineTransformOp.TYPE_BILINEAR);
of.filter(image, destination);

TYPE_BILINEAR : meilleur rendu, mais plus long. On peut utiliser TYPE_NEAREST_NEIGHBOR à la place (+ rapide).

  • Echelle : RescaleOp
  • Correspondance de couleurs : LookupOp
  • Utiliser pour cela une LookupTable, par exemple pour faire le négatif d’une image

    byte neg[] = new byte[256]
    for int i=0; i<256; i++) {
    	neg[i] = 255-i;
    }
    ByteLookupTable table = new ByteLookupTable(0, neg);
    LookupOp op = new LookupOp(table, null);
    
  • Conversion de couleurs : ColorConvertOp
  • Convolutions sur l’image
  • // Créer une matrice de float[]
    flou = new float[] { 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9 }
    contours = new float[] {0, -1, 0, -1, 4, -1, 0, -1, 0})
    Kernel k = new Kernel(3, 3, matrice);
    new ConvolveOp(kernel).filter(image, destination);
    

L’enregistrement

api-jpeg ; api-gif

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *