微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

凸轮在表面支架上的图片,绘制:由于表面类型而异

如何解决凸轮在表面支架上的图片,绘制:由于表面类型而异

| 我正在使用
SurfaceView
SurfaceHolder
来开始在我的测试应用中进行摄像机预览。
public class TextLocatorActivity extends Activity {

    private Preview pvw;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestwindowFeature(Window.FEATURE_NO_TITLE);
        this.getwindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

        pvw = new Preview(this);
        setContentView(pvw);        
    }   
我想使用CameraPreview(SDK版本7的SDK样本随附)。单击UI即可拍照。这是
Preview
类:
public class Preview extends SurfaceView implements OnClickListener,SurfaceHolder.Callback {

SurfaceHolder holder;
Camera cam; 

final static String TAG = \"TextLocator:Preview\";

Preview(Context context) {
    super(context);

    holder = getHolder();
    holder.addCallback(this);
    this.setonClickListener(this);
    // seems to be required (although the docs state,this enum is deprecated,as the type will be chosen automatically...
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    cam = Camera.open();
    try {
        Camera.Parameters params = cam.getParameters();
        params.set(\"orientation\",\"landscape\");
        Camera.Size bestSize = getBestPreviewSize(480,320);
        params.setPreviewSize(bestSize.width,bestSize.height);
        cam.setParameters(params);
        // where to draw:
        cam.setPreviewdisplay(holder);
    } catch (IOException exception) {
        cam.release();
        cam = null;
        // Todo: add more exception handling logic here
    }
}

private Camera.Size getBestPreviewSize(int width,int height)
{
    // checks for supported sizes close to the demanded values - implemented.
}


public void surfaceDestroyed(SurfaceHolder holder) {
    cam.stopPreview();
    cam.release();
    cam = null;
}

public void surfaceChanged(SurfaceHolder holder,int format,int w,int h) {
    Camera.Parameters parameters = cam.getParameters();
    parameters.setPreviewSize(w,h);

    cam.setParameters(parameters);
    cam.startPreview();
}

Camera.PictureCallback picCallback = new Camera.PictureCallback() {

    public void onPictureTaken(byte[] bytes,Camera arg1) {
        synchronized(holder) {
                Canvas c = null;    

                try {
                    c = holder.lockCanvas();                

                    Paint paint = new Paint();
                    paint.setAntiAlias(false);
                    paint.setARGB(200,120,180,0);

                    c.drawLine(10,10,c.getWidth() - 10,c.getHeight() - 10,paint);
                }
                catch (Exception e) {
                    Log.d(TAG,\"Exception: \" + e.getMessage());
                    // IllegalArguementException Surface Type is SURFACE_TYPE_PUSH_BUFFERS
                }
                finally {       
                    holder.unlockCanvasAndPost(c);  
                }
            }
    }
};

public void onClick(View v) 
{
    cam.takePicture(null,null,picCallback);    
}
} 接下来,我尝试对ѭ1的对应ѭ5进行一些附加绘制。因此,我打电话给
canvas = holder.lockCanvas()
。这将导致消息中出现“ 8”字样:
Surface type is SURFACE_TYPE_PUSH_BUFFERS
现在,文档指出不赞成使用这些Surface Type,这些值集将被忽略。但是,仅当我将类型设置为此特定值时,摄像机预览才有效。 如何在显示的照片的“ 0”的“ 5”上画图?还是应该将其放在其他图层/视图上?     

解决方法

        您不能同时显示相机预览和使用“画布”进行绘制。您必须做另一件事。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。