
当我使用我的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相机图像大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)