2011-08-12 2 views
0

J'ai un flux JPEG mouvement qui est mis sur une toile dans Android. Mon problème est qu'en bas à droite de la toile il y a une petite barre grise pixélisée. Il disparaît et réapparaît. Je n'ai pas ce problème sur d'autres plates-formes qui utilisent le même flux, donc je suppose que c'est un problème Android. Voici mon code:Problème bitmap Android

Canvas canvas = null; 
      try 
      { 

       Bitmap bmp = BitmapFactory.decodeByteArray(notifi.imgData, 0, notifi.imgData.length); 
       if (bmp == null) 
        System.out.println("Skipping invalid MJpeg frame"); 
       else 
       { 
        canvas = holder.lockCanvas(null); 
        if (canvas == null) 
        { 
         System.out.println("Cannot lock canvas, skipping MJpeg frame"); 
         return; 
        } 
        canvas.drawColor(Color.BLACK); 

        Rect dst = null; 
        int viewWidth = mPreview.getWidth(); 
        int viewHeight = mPreview.getHeight(); 
        float ratio = bmp.getWidth()/(float)bmp.getHeight(); 
        int desiredHeight = (int)(viewWidth/ratio); 
        if (desiredHeight > viewHeight) 
        { // Letterbox 
         int maxWidth = (int)(viewHeight * ratio); 
         int pad = (viewWidth - maxWidth)/2; 
         dst = new Rect(pad, 0, maxWidth + pad, viewHeight); 
        } 
        else 
        { 
         int pad = (viewHeight - desiredHeight)/2; 
         dst = new Rect(0, pad, viewWidth, desiredHeight + pad); 
        } 

        canvas.drawBitmap(bmp, null, dst, null); 
       } 
      } finally { 
       if (canvas != null) 
        holder.unlockCanvasAndPost(canvas); 
      } 
     } 
     }); 

Répondre

0

canvas = holder.lockCanvas(null); semble suspect. À la place, essayez canvas = holder.lockCanvas();.

0

Je remarque que vous ajoutez un "Pad" au rectangle de destination pour modifier sa hauteur. Si vous faites cela, je me demande si la taille du rectangle de destination correspondra à la taille de l'image que vous dessinez et donc "dessinez" une barre grise comme vous le voyez. Juste une supposition - peut-être que si vous retirez le tampon de hauteur, il s'en ira? Juste une supposition.

dst = new Rect(0, pad, viewWidth, desiredHeight + pad); 
canvas.drawBitmap(bmp, null, dst, null); 
+0

le rembourrage me donne juste la hauteur appropriée. Cette petite "barre" grise ne couvre même pas toute la largeur du jpeg. Juste le coin inférieur droit de celui-ci et la fin du sentier est pixélisé. Y at-il des options BitmapFactory qui pourraient aider? – spentak