2016-11-10 712 views
-2

我正在試圖獲得後置鏡頭的預覽鏡像......我的意思是預覽應該垂直鏡像圖像;它應該像從前端相機那樣從右到左交換...... 我不需要像前端攝像頭那樣需要正常預覽,而是嘗試SurfaceTexture。 有沒有人知道這件事? 任何類型的幫助表示讚賞!如何鏡像後置攝像頭預覽?

+1

你只是試圖翻轉圖片,使它看起來像在主相機上? – drew

+0

是的,我想翻轉預覽從右到左或從左到右,這對我來說是一樣的...你知道任何方法嗎? –

+0

你使用的是camera2api嗎?或者更老的? – drew

回答

1

這就是我所做的。我將像素數組轉換爲位圖並將其翻轉。我注意到我也必須旋轉我的圖像。如果你需要這樣做,你可以使用下面的rotateBitmap方法。我翻轉它之前旋轉它。由於我的應用程序使用了兩個攝像頭,因此我首先檢查它是否使用前置攝像頭。

public Bitmap flip(Bitmap d) 
{ 
    Matrix m = new Matrix(); 
    m.preScale(-1, 1); 
    Bitmap dst = Bitmap.createBitmap(d, 0, 0, d.getWidth(), d.getHeight(), m, false); 
    dst.setDensity(DisplayMetrics.DENSITY_DEFAULT); 
    return dst; 
} 

public Bitmap rotateBitmap(Bitmap source, float angle) 
{ 
    //Rotates Bitmap 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(angle); 
    return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); 
} 

所以它看起來像這樣。

if(orienation == Orienation.SELFIE) 
{    
    bMap = rotateBitmap(bMap, 270); 
    bMap = flip(bMap); 
} 

這些只是我在我的應用程序中使用的一些自定義字段。我想你明白了,不管你需要什麼都可以滿足。

private Camera.PictureCallback mPicture = new Camera.PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     Bitmap bMap = BitmapFactory.decodeByteArray(data, 0, data.length); 
     if (currentCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
      frontFacing = true; 
     } 
    } 
}; 

您可以在PictureCallback中創建位圖。只需將像素數組轉換爲位圖即可。如果你在你的應用程序中使用兩個攝像頭,你可以檢查你是否像前面的例子那樣使用了前一個攝像頭。

+0

另外,如果這可以解決您的問題,請將其標記爲如此。這將幫助其他人遇到同樣的問題。 – drew

+0

謝謝,我已經標記爲現在的答案 –

+0

你知道如何將預覽轉換爲位圖嗎? –