从Mobile vision的面部追踪相机中获取位图

时间:2016-12-07 16:45:53

标签: android mobile bitmap vision

我正试图从移动视觉的脸部追踪相机获取位图,但经过大约5个小时的尝试后,我有点陷入困境。

予。首先,结果:带

的空白图像
Bitmap image = mSurfaceView.getDrawingCache(). 

我已经在这里为SetDrawingCache设置了true:

    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位图 - >结果:太可怕了。一切都是正确的是错误的。

如果有人能提出任何解决方案(即使建议很好),我将非常感激。

泉。

1 个答案:

答案 0 :(得分:2)

经过8个小时的尝试。我得到了这个解决方法。

首先,我在脸部摄影相机中使用它的X和Y获得叠加截图:

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

然后我从相机拍了一张照片。调整叠加大小以适合相机中的图片。之后,我将这些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);