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);
ColorConvertOp
// 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);