2011-08-12 75 views
0

我有一個運動JPEG流,放在Android的畫布上。我的問題是在畫布的右下方有一個灰色的像素化的小欄。它有點消失並重新出現。我在其他使用相同流的平臺上沒有這個問題,所以我猜測它是一個Android問題。這裏是我的代碼: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); 
      } 
     } 
     }); 

回答

0

canvas = holder.lockCanvas(null);看起來有嫌疑。

嘗試用canvas = holder.lockCanvas();代替。

0

我注意到你正在爲目標矩形添加一個「Pad」來改變它的高度。

如果這樣做,我不知道目標矩形的大小是否與您正在繪製的圖像的大小相匹配,從而在您看到的「過度繪製」某個灰色條。只是一個猜測 - 也許如果你刪除高度墊它將消失?只是一個猜測。

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

填充只是給了我適當的高度。這個小小的灰色「條」甚至沒有覆蓋jpeg的整個寬度。就在它的右下角,它的尾跡像素化了。是否有任何BitmapFactory選項可能有幫助? – spentak