【问题标题】:Get Bitmap from Mobile vision's face tracking camera从 Mobile vision 的人脸跟踪摄像头获取 Bitmap
【发布时间】:2017-04-22 17:15:56
【问题描述】:

我正在尝试从移动视觉的面部跟踪相机获取位图,但经过大约 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);
    }

二。之后我尝试:截取Graphic Overlay的截图,并从相机拍摄,然后合并这2个位图->结果:可怕。一切需要正确都是错误的。

如果有人能提出任何解决方案(即使是建议也可以),我将不胜感激。

泉。

【问题讨论】:

  • 你能添加位图吗? “结果:太糟糕了。所有需要正确的事情都是错误的。”不是很丰富。另外,如何合并 BMP?
  • 是的,我可以将它们加在一起。但是屏幕截图图形覆盖的位图比我从面部跟踪相机得到的要大。所以结果很奇怪。

标签: android mobile bitmap vision


【解决方案1】:

经过 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);

【讨论】:

  • 你能发布完整的解决方案吗,我也被困在这里两天了,仍然无法与加载的位图和叠加层合并。谢谢
  • 我正在尝试这样 Bitmap overlay = takeScreenshotForView(mGraphicOverlay);矩阵 rotateMatrix = new Matrix(); rotateMatrix.postRotate(90); rotateBitmap = Bitmap.createBitmap(loadedImage, 0, 0, loadedImage.getWidth(), loadedImage.getHeight(), rotateMatrix, false);叠加 = MergeBitmap(旋转位图,叠加); saveToInternalStorage(overlay);
  • 这不是一个完整的答案。如果您编辑帖子并提供完整的解决方案,那就太好了。
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 2016-07-20
  • 2021-07-18
  • 2016-08-14
  • 2019-11-02
  • 2018-10-08
  • 2021-03-16
  • 2017-12-02
相关资源
最近更新 更多