【问题标题】:Drawing on top of a live camera feed在实时摄像机源上绘图
【发布时间】:2011-04-01 19:42:02
【问题描述】:

在我的应用程序中,我只想在实时摄像头提要的面部位置上绘制一个矩形 ..为此我使用以下代码

@Override
    public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
             try {         
                 camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
                    public void onPreviewFrame(byte[]_data, Camera _camera) {
                    // TODO Do something with the preview image.
                        byte data[]=_data;
                        Bitmap b = BitmapFactory.decodeByteArray(data, 0, data.length);
                    DrawOnTop  mDraw.bitmap=b;

                    addContentView(mDraw, new LayoutParams 
                                (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                    //detecteye(bitmap);

                    }
                    });
 } catch (IOException e)
             {         e.printStackTrace();    
             }    
             camera.startPreview();
}
class DrawOnTop extends View { 

    Bitmap bitmap;

    public DrawOnTop(Context context,AttributeSet attrs) { 

            // TODO Auto-generated constructor stub 
         super(context,attrs); 

    } 


    @Override 
    protected void onDraw(Canvas canvas) { 
            // TODO Auto-generated method stub 
        Paint ditherPaint = new Paint();
        Paint drawPaint = new Paint();
        if(null != bitmap)
        {                  int width = bitmap.getWidth();
        int height = bitmap.getHeight(); 
        FaceDetector detector = new FaceDetector(width, height,1);
        Face[] faces = new Face[1];
        //Bitmap bitmap565 = Bitmap.createBitmap(width, height, Config.RGB_565);

        ditherPaint.setDither(true);  
        drawPaint.setColor(Color.RED); 
        drawPaint.setStyle(Paint.Style.STROKE);
        drawPaint.setStrokeWidth(2); 

        //canvas.setBitmap(bitmap565); 
        //canvas.drawBitmap(bitmap, 0, 0, ditherPaint);
        int facesFound = detector.findFaces(bitmap, faces);
        PointF midPoint = new PointF();
        float eyeDistance = 0.0f;
       // float confidence = 0.0f; 
       // Log.i("FaceDetector", "Number of faces found: " + facesFound);
        if(facesFound > 0)                 
        {                        
            for(int index=0; index<facesFound; ++index)
            {   // Get the eye distance, detected eye mid point and confidence  
                faces[index].getMidPoint(midPoint); 
                eyeDistance = faces[index].eyesDistance();
                //confidence = faces[index].confidence();
                //Log.i("FaceDetector",
                    //  "Confidence: " + confidence +
                        //", Eye distance: " + eyeDistance +   
                        //", Mid Point: (" + midPoint.x + ", " + midPoint.y + ")");
                // Draw a small rectangle frame around the eye   
                canvas.drawRect((int)midPoint.x - eyeDistance ,  
                        (int)midPoint.y - eyeDistance ,   
                        (int)midPoint.x + eyeDistance,  
                        (int)midPoint.y + eyeDistance, drawPaint); 
                }    

        }
        }




            super.onDraw(canvas); 


    } }

但是我一直收到错误 No command output when running: 'am start -n in my error log and the app force每次都关闭,这真的很令人沮丧,因为我两周以来一直坚持这个问题:(请有人告诉我我可以摆脱这个错误,考虑到我想要做什么,有没有类似的简单例子

【问题讨论】:

  • 你有没有发现哪里出了问题?

标签: android android-camera


【解决方案1】:

我不知道这是否与您的 FC 有关,但我不会在 onPreviewFrame 回调中将字节数组解码为位图。每当我在相机预览上绘制自定义视图时,我只是将其添加到与 SurfaceView 相同的 RelativeLayout。

【讨论】:

  • @Rich-hey thnx 的帮助我转移了 d 解码部分 elseware 但是我需要在每次收到新帧时调用自定义视图的 onDraw 方法,不知道我怎么能这样做应用程序再次崩溃..如果你能指出一个类似的代码示例,那将是一个 gr8 帮助..thnx 再次
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多