Android相机图像大小

Android相机图像大小,第1张

概述在我的应用程序中,我能够使用相机类来运行一个代码来拍摄照片,但是它给了我2048 x 1536像素的图像大小. 当我使用我的Android设备的默认相机,它给我2048 x 1232像素作为图像大小. 现在,问题是,如何让我的应用程序给我相同的图像大小像默认的相机(这是2048 x 1232)当我拍照? 我有这些代码: CameraActivity.java public class Camera 在我的应用程序中,我能够使用相机类来运行一个代码来拍摄照片,但是它给了我2048 x 1536像素的图像大小.

当我使用我的Android设备的默认相机,它给我2048 x 1232像素作为图像大小.

现在,问题是,如何让我的应用程序给我相同的图像大小像默认的相机(这是2048 x 1232)当我拍照?

我有这些代码:

CameraActivity.java

public class CameraActivity extends Activity {    private static final String TAG = "CameraDemo";    PrevIEw prevIEw; // <1>    FrameLayout buttonClick; // <2>    /** Called when the activity is first created. */    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.camera);        Toast.makeText(getBaseContext(),"touch the screen to take picture.",Toast.LENGTH_SHORT).show();        prevIEw = new PrevIEw(this); // <3>        ((FrameLayout) findVIEwByID(R.ID.prevIEw)).addVIEw(prevIEw); // <4>        //buttonClick = (button) findVIEwByID(R.ID.buttonClick);        buttonClick = (FrameLayout) findVIEwByID(R.ID.prevIEw);        buttonClick.setonClickListener(new OnClickListener() {            public voID onClick(VIEw v) { // <5>                prevIEw.camera.takePicture(shutterCallback,rawCallback,jpegCallback);            }        });        Log.d(TAG,"onCreate'd");    }    // Called when shutter is opened    ShutterCallback shutterCallback = new ShutterCallback() { // <6>        public voID onShutter() {            Log.d(TAG,"onShutter'd");        }    };    //Handles data for raw picture    PictureCallback rawCallback = new PictureCallback() { // <7>        public voID onPictureTaken(byte[] data,Camera camera) {            Log.d(TAG,"onPictureTaken - raw");        }    };    // Handles data for jpeg picture    PictureCallback jpegCallback = new PictureCallback() { // <8>        public voID onPictureTaken(byte[] data,Camera camera) {            fileOutputStream outStream = null;            try {                //Write to SD Card                outStream = new fileOutputStream(                    String.format(                            Environment.getExternalStorageDirectory() + "/Engagia/AudIEnceImages/" + CameraActivity.this.sessionNumber + ".jpg",System.currentTimeMillis()                    )); // <9>                outStream.write(data);                outStream.close();                Toast.makeText(getBaseContext(),"PrevIEw",Toast.LENGTH_SHORT).show();                Log.d(TAG,"onPictureTaken - wrote bytes: " + data.length);            } catch (fileNotFoundException e) { // <10>                e.printstacktrace();            } catch (IOException e) {                e.printstacktrace();            } finally {            }            Log.d(TAG,"onPictureTaken - jpeg");        }    };}

PrevIEw.java

package com.first.Engagia;import java.io.IOException;import androID.content.Context;import androID.harDWare.Camera;import androID.harDWare.Camera.PrevIEwCallback;import androID.util.Log;import androID.vIEw.SurfaceHolder;import androID.vIEw.SurfaceVIEw;class PrevIEw extends SurfaceVIEw implements SurfaceHolder.Callback { // <1>    private static final String TAG = "PrevIEw";    SurfaceHolder mHolder;  // <2>    public Camera camera; // <3>    PrevIEw(Context context) {        super(context);        // Install a SurfaceHolder.Callback so we get notifIEd when the        // underlying surface is created and destroyed.        mHolder = getHolder();  // <4>        mHolder.addCallback(this);  // <5>        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // <6>    }    //Called once the holder is ready    public voID surfaceCreated(SurfaceHolder holder) {  // <7>        // The Surface has been created,acquire the camera and tell it where        // to draw.        camera = Camera.open(); // <8>        try {            camera.setPrevIEwdisplay(holder);  // <9>            camera.setPrevIEwCallback(new PrevIEwCallback() { // <10>                // Called for each frame prevIEwed                public voID onPrevIEwFrame(byte[] data,Camera camera) {  // <11>                    Log.d(TAG,"onPrevIEwFrame called at: " + System.currentTimeMillis());                    PrevIEw.this.invalIDate();  // <12>                }            });        } catch (IOException e) { // <13>            e.printstacktrace();        }    }  // Called when the holder is destroyed  public voID surfaceDestroyed(SurfaceHolder holder) {  // <14>    camera.stopPrevIEw();    camera = null;  }  // Called when holder has changed  public voID surfaceChanged(SurfaceHolder holder,int format,int w,int h) { // <15>    camera.startPrevIEw();  }}

main.xml中:

<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:ID="@+ID/prevIEw" androID:layout_wIDth="match_parent"androID:layout_height="match_parent" ><button androID:layout_wIDth="wrap_content"androID:layout_height="wrap_content" androID:ID="@+ID/buttonClick"androID:text="Click"androID:layout_gravity="right|bottom" /></FrameLayout>
解决方法 您可以在摄像机参数对象上使用setPictureSize()来配置捕获的大小:

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setPictureSize(int,int)

一般来说首先你应该调用getSupportedPictureSizes()来确保你要求一个硬件支持的分辨率,但是听起来你已经知道了这些大小.

总结

以上是内存溢出为你收集整理的Android相机图像大小全部内容,希望文章能够帮你解决Android相机图像大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1133936.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存