2012-03-04 12 views

Répondre

-2

J'utilise cette formule pour filtrer les images selon leur extension

class FileExtensionFilter implements FilenameFilter { 
     public boolean accept(File dir, String name) { 
      return (name.endsWith(".png") || name.endsWith(".PNG")); 
     } 

Si vous récupérez-le de la carte SD me laisser savoir à ce sujet .Je avait code pour elle.

+0

La question concerne le filtrage graphique ne filtrant pas par extension de fichier. – stealthcopter

2

J'ai récemment posté là une version plus rapide du code que vous avez essayé, vous devriez essayer. Par ailleurs, que voulez-vous dire par la phrase les images ne sont pas comme prévu? Peut-être que vous utilisez simplement une mauvaise matrice; vous pouvez trouver un exemple de matrice here.

Voici l'échantillon que vous avez demandé. Si vous n'avez pas besoin de mettre à l'échelle ou de décaler les couleurs des pixels, vous devez ajouter différentes implémentations de convolute sans ces paramètres et les calculs inutiles associés.

class Convolution { 

    private static Bitmap convolute(Bitmap bmp, Matrix mat, float factor, int offset) { 
    /* ... */ 
    } 

    private static Matrix getEdgeEnhanceMatrix() { 
     Matrix m = new Matrix(); 
     m.setValues(new float[] { 
       0, 0, 0, 
       -1, 1, 0, 
       0, 0, 0 
     }); 
     return m; 
    } 

    // the simple way 
    public static Bitmap edgeEnhance1(Bitmap bmp) { 
     return convolute(bmp, getEdgeEnhanceMatrix(), 1f, 0); 
    } 

    // if you want to apply filter to border pixels 
    // warning: really memory consuming 
    public static Bitmap edgeEnhance2(Bitmap bmp, int bgColor) { 
     // create a bigger canvas 
     Bitmap bigger = Bitmap.createBitmap(bmp.getWidth() + 2, bmp.getHeight() + 2, bmp.getConfig()); 
     Canvas cBigger = new Canvas(bigger); 
     // paint background 
     cBigger.drawColor(bgColor); 
     // draw the bmp you want to manipulate from (1,1) 
     cBigger.drawBitmap(bmp, 1, 1, null); 
     // compute convolution 
     bigger = convolute(bigger, getEdgeEnhanceMatrix(), 1f, 0); 

     // create the result and project the convolution at (-1,-1) 
     Bitmap rt = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig()); 
     Canvas cRt = new Canvas(rt); 
     cRt.drawBitmap(bigger, -1, -1, null); 

     return rt; 
    } 
} 
+0

Merci pour la réponse, lorsque j'applique le tableau, puis affichez l'image à quelques pixels. Je vais essayer votre code. – tebitoq

+0

le pixel que vous remarquez est parce que, pour transformer un pixel, vous avez besoin des huit pixels qui l'entourent: vous allez donc "perdre" un rectangle d'un pixel autour de l'image - ou en tout cas, comme je le fais, ceux-ci ne seront pas transformés. – ubik

+0

aurait donc créer la matrice? \t \t flotteur src [] = {0,0,0, \t \t \t \t \t -1, -1,0 \t \t \t \t \t, 0,0,0}; \t \t Matrice mx = new Matrice(); \t \t mx.setValues ​​(src); – tebitoq

Questions connexes