gpt4 book ai didi

Android 相机图像大小

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:32 26 4
gpt4 key购买 nike

在我的应用中,我能够使用相机类运行代码来拍照,但它给我的图像尺寸为 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");
}
};
}

预览.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();
}

}

主.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 , 整数)

一般来说,首先您应该调用 getSupportedPictureSizes() 以确保您请求的是硬件支持的分辨率,但听起来您已经知道尺寸。

关于Android 相机图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6756888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com