Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android相机图像大小大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我能够使用相机类来运行一个代码来拍摄照片,但是它给了我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();
  }

}
@H_880_2@main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://scheR_714_11845@as.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相机图像大小所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。