Un algo pour réduire une image?
Bon, je vois plusieurs solution: tu peux regarder les sources du jse, voir comment ils implémentent Image.getScaledInstance(). et voir comment l’adpater aux classes du JME( javax.microedition.lcdui.Image)
-> code ton propre algo from scratch, nétant pas spécialiste en traitement d’image ma méthode est la suivante:
-allouer le tableau d’int de la nouvelle image
- boucler sur tous les pixels de la nouvelle image pour calculer leur valeur
- sur chaque pixel à calculer, rechercher la position dans l’image d’origine
- prendre la valeur AARRGGBB dans l’ancienne image.
C’est sur le dernier point qu’il y a moyen d’avoir une meilleure qualité, si tu prend juste la valeur d’un pixel sur l’image d’origine, le résultat sera un peu faux, et si tu prend la valeur de plusieurs pixel, il faudrait moyenner chaque pixel de l’image d’origine.
Si tu divise par deux la largeur et la hauteur, l’algo est beaucoup plus simple à coder.
La version basique avec un seul point dans l’image d’origine (non-garanti):
/**
* Class Zoom
* @author deltree
*/
public class Zoom {
public void unzoom(int[][] in, int[][] out){
for(int i=0;i<out.length;i++)
for(int j=0;j<out[i].length;j++)
out[i][j]= computepixel(in,i,j,out.length,out[i].length);
}
private int computepixel(int[][] out, float i, float j, int width, int height) {
float x,y;
x=(float) (i/width)*out.length;
y=(float) (j/height)*out[0].length;
x=(x<out.length)?x:(out.length-1);
y=(y<out[0].length)?y:(out[0].length-1);
return out[(int)x][(int)y];
}
public static void main(String[] argv){
int[][] oldimage = new int[][]{
{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},
{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},
{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},
{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF}
};
int[][] newimage = new int[2][2];
new Zoom().unzoom(oldimage,newimage);
}