2016-12-07 3 views
1

私はモバイルビジョンの顔追跡カメラからビットマップを取得しようとしていますが、約5時間の試行後、私は固執しています。モバイルビジョンの顔追跡カメラからビットマップを取得

I.まず、結果:私はすでにここにSetDrawingCacheためにtrueに設定

Bitmap image = mSurfaceView.getDrawingCache(). 

とブランク画像:

public CameraSourcePreview(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mContext = context; 
    mStartRequested = false; 
    mSurfaceAvailable = false; 
    mSurfaceView = new SurfaceView(context); 
    mSurfaceView.getHolder().addCallback(new SurfaceCallback()); 

    //HERE 
    mSurfaceView.setDrawingCacheEnabled(true); 

    addView(mSurfaceView); 
    } 

II。その後、私は試みました:Graphic OVerlayのスクリーンショットを撮り、カメラからショットを取得し、これらの2ビットマップ - >結果:恐ろしいものをマージします。すべて正しいことが間違っている必要があります。

誰もが解決策を考え出すことができます(提案がうまくいけば)、私は非常に感謝します。

クワン。

+0

ビットマップを追加できますか? "結果:恐ろしい、正しいことがすべて間違っている"非常に有益ではありません。また、どのようにBMPをマージしますか? –

+0

はい、一緒に追加できます。しかし、グラフィックスオーバーレイのスクリーンショットからのビットマップは、私の顔追跡カメラから得られるビットマップよりも大きい。結果は非常に奇妙です。 – NeatBits

答えて

2

試してから8時間後。私はこの回避策を得る。

overlay = screenShot(mGraphicOverlay); 
final float overlayX = mGraphicOverlay.getX(); 
final float overlayY = mGraphicOverlay.getY(); 

、私はカメラから写真を撮る:それはfacetrackingカメラでXとYだと

まず、私は、オーバーレイスクリーンショットを取得します。オーバーレイのサイズを変更して、カメラの画像に合わせます。その後、それらの2つを1つのビットマップにマージします。それをメインアクティビティに戻します。

mCameraSource.takePicture(null, new CameraSource.PictureCallback(){ 
       @Override 
       public void onPictureTaken(byte[] bytes) { 
        //Bitmap loadedImage = null; 
        loaded = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

        Bitmap rotatedBitmap = null; 
        Matrix rotateMatrix = new Matrix(); 
        rotateMatrix.postRotate(90); 
        rotatedBitmap = Bitmap.createBitmap(loaded, 0, 0, 
          loaded.getWidth(), loaded.getHeight(), 
          rotateMatrix, false); 

        overlay = resize(overlay,rotatedBitmap.getWidth(), rotatedBitmap.getHeight()); 


        merged = MergeBitmap(rotatedBitmap, overlay, overlayX, overlayY); 

        Intent myIntentA1A2 = new Intent(context, MainActivity.class); 

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
        merged.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
        byte[] byteArray = byteArrayOutputStream .toByteArray(); 
        String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 
        //imgDecodableString = BitMapToString(GlobalResource.glass); 
        myIntentA1A2.putExtra("Image", encoded); 

        context.startActivity(myIntentA1A2); 
+0

あなたは完全なソリューションを投稿することができます、私はまた2日以来ここで立ち往生し、まだロードされたビットマップとオーバーレイとマージすることができません。ありがとう – Zia

+0

私はこのようにしています ビットマップオーバーレイ= takeScreenshotForView(mGraphicOverlay); 行列rotateMatrix = new Matrix(); rotateMatrix.postRotate(90); rotateBitmap = Bitmap.createBitmap(loadedImage、0、0、 loadedImage.getWidth()、loadedImage.getHeight()、 rotateMatrix、false); overlay = MergeBitmap(rotateBitmap、overlay); saveToInternalStorage(オーバーレイ); – Zia

+0

こんにちはNeatBits、完全なコードを投稿できますか? – Moorthy

関連する問題