2017-07-08 55 views
0

我想在ImageView中顯示一個位圖。使用Camera2 API,我得到ImageReader.OnImageAvailableListener上的ImageReader。然後,我從圖像中創建位圖:位圖不正確的大小和方向

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new 
     ImageReader.OnImageAvailableListener() { 
      @Override 
      public void onImageAvailable(ImageReader reader) { 
       mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage())); 
      } 
     }; 
private class ImageSaver implements Runnable { 

    private final Image mImage; 

    public ImageSaver(Image image) { 
     mImage = image; 
    } 

    @Override 
    public void run() { 
     ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer(); 
     byte[] bytes = new byte[byteBuffer.remaining()]; 
     byteBuffer.get(bytes); 
     // need to set the bitmap the size of the screen 
     final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       imageView.setImageBitmap(bitmap); 
      } 
     }); 

正如你從截圖中可以看出來,位圖不填滿整個屏幕,它是在橫向而不是縱向。我的ImageView看起來像這樣:

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" /> 

它的父母是填充整個屏幕的RelativeLayout。那麼我做錯了什麼?

enter image description here

+0

這可能有所幫助:https://stackoverflow.com/questions/9015372/how-to-rotate-a-bitmap-90-degrees – Barns

回答

0

用在我的處境幫助安卓Matrix類:

   ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer(); 
       byte[] bytes = new byte[byteBuffer.remaining()]; 
       byteBuffer.get(bytes); 
       final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

       Matrix matrix = new Matrix(); 
       matrix.postRotate(90); 
       Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap,mImage.getWidth(),mImage.getHeight(),true); 
       Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true); 

誰能指點我,如果這是一個很好的解決方案,也可以將此代碼進行重構?

相關問題