有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何修复SurfaceView和安卓摄像头的大小

我为安卓编写程序、摄像头。我使用下一个代码

package camera;



public class SurfaceCamera extends Activity implements SurfaceHolder.Callback {
    TextView testView;

    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;

    PictureCallback rawCallback;
    ShutterCallback shutterCallback;
    PictureCallback jpegCallback;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.video_surf);

        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
        surfaceHolder = surfaceView.getHolder();

        surfaceHolder.addCallback(this);

        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        jpegCallback = new PictureCallback() {
            public void onPictureTaken(byte[] data, Camera camera) {
                FileOutputStream outStream = null;
                try {
                    outStream = new FileOutputStream(String.format("/sdcard/Octopus/gif/%d.jpg", System.currentTimeMillis()));
                    outStream.write(data);
                    outStream.close();
                    Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                }
                Toast.makeText(getApplicationContext(), "Picture Saved", 2000).show();
                refreshCamera();
            }
        };
    }

    public void captureImage(View v) throws IOException {
        //take the picture
        camera.takePicture(null, null, jpegCallback);
    }

    public void refreshCamera() {
        if (surfaceHolder.getSurface() == null) {
            // preview surface does not exist
            return;
        }

        // stop preview before making changes
        try {
            camera.stopPreview();
        } catch (Exception e) {
            // ignore: tried to stop a non-existent preview
        }

        // set preview size and make any resize, rotate or
        // reformatting changes here
        // start preview with new settings
        try {
            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();
        } catch (Exception e) {

        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // Now that the size is known, set up the camera parameters and begin
        // the preview.

        refreshCamera();
    }

    public void surfaceCreated(SurfaceHolder holder) {
        try {
            // open the camera
            camera = Camera.open();

        } catch (RuntimeException e) {
            // check for exceptions
            System.err.println(e);
            return;
        }
        Camera.Parameters param;
        param = camera.getParameters();
        //param.setColorEffect(Camera.Parameters.EFFECT_NEGATIVE);
        // modify parameter
        param.setPreviewSize(600, 900);
        camera.setDisplayOrientation(90);
        camera.setParameters(param);
        try {
            // The Surface has been created, now tell the camera where to draw
            // the preview.
            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();
        } catch (Exception e) {
            // check for exceptions
            System.err.println(e);
            return;
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // stop preview and release camera
        camera.stopPreview();
        camera.release();
        camera = null;
    }

}

布局

<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:id="@+id/container"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:orientation="vertical"
    tools:context="com.javacodegeeks.安卓surfaceviewexample.AndroidSurfaceviewExample" >

    <SurfaceView
        安卓:id="@+id/surfaceView"
        安卓:layout_width="300dp"
        安卓:layout_height="200dp" />

    <LinearLayout
        安卓:id="@+id/capture"
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content"
        安卓:clickable="true"
        安卓:gravity="center"
        安卓:onClick="captureImage"
        安卓:orientation="horizontal" >

        <TextView
            安卓:layout_width="wrap_content"
            安卓:layout_height="wrap_content"
            安卓:gravity="center"
            安卓:padding="10dp"
            安卓:text="Capture"
            安卓:textAppearance="?安卓:attr/textAppearanceLarge" />
    </LinearLayout>

</LinearLayout>

我在表面上看到的图像(在表面上)图片是扭曲的,在拐角处拉伸https://www.dropbox.com/s/ul5enua7tb07zkr/shot_000002.png?dl=0

但是如果我拍了所有的照片好吗https://www.dropbox.com/s/zibn89tl38a8eur/1424809721079.jpg?dl=0

请帮忙,我写错了什么?我怎么能修好它

多谢各位


共 (0) 个答案