Android摄像头的图像质量非常低
我正试图从相机上拍摄图像,但图像质量非常差。我不知道为什么,因为我是一个为android编程的新手 我试过几次,但都没有成功。这是我的密码。请帮助我在哪里更改代码Android摄像头的图像质量非常低,android,android-camera,Android,Android Camera,我正试图从相机上拍摄图像,但图像质量非常差。我不知道为什么,因为我是一个为android编程的新手 我试过几次,但都没有成功。这是我的密码。请帮助我在哪里更改代码 public class MainActivity extends Activity implements TextureView.SurfaceTextureListener { private Camera mCamera; private TextureView mTextureView1; @Ove
public class MainActivity extends Activity implements TextureView.SurfaceTextureListener {
private Camera mCamera;
private TextureView mTextureView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextureView1 = (TextureView) findViewById(R.id.textureView1);
mTextureView1.setSurfaceTextureListener(this);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
try {
mCamera = Camera.open(getCameraId());
mCamera.setPreviewTexture(surface);
Camera.Parameters params=mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPictureSizes();
Camera.Size size = sizes.get(0);
for(int i=0;i<sizes.size();i++)
{
if(sizes.get(i).width > size.width)
size = sizes.get(i);
}
params.setPictureSize(size.width, size.height);
params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
params.setExposureCompensation(0);
params.setPictureFormat(ImageFormat.JPEG);
params.setJpegQuality(100);
params.setRotation(90);
params.setJpegQuality(100);
params.setPreviewSize(size.width, size.height);
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
Camera.getCameraInfo(getCameraId(), cameraInfo);
setCameraDisplayOrientation(this, getCameraId(), mCamera);
mCamera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees + 360) % 360;
}
camera.setDisplayOrientation(result);
}
private int getCameraId() {
int cameraId = -1;
// Search for the front facing camera
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
// Log.d(DEBUG_TAG, "Camera found");
cameraId = i;
break;
}
}
return cameraId;
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
try {
mCamera.stopPreview();
mCamera.release();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
Camera.PictureCallback mPicture = new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE);
if (pictureFile == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
private static File getOutputMediaFile(int mediaTypeImage) {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
return mediaFile;
}
public void onClick(View v){
mCamera.takePicture(null, null, mPicture);
}
}
public类MainActivity扩展活动实现TextureView.SurfaceTextureListener{
私人摄像机麦卡梅拉;
私有TextureView mTextureView1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextureView1=(TextureView)findViewById(R.id.TextureView W1);
mTextureView1.setSurfaceTextureListener(此);
}
@凌驾
SurfaceTextureAvailable上的公共空心(SurfaceTexture曲面、整型宽度、整型高度){
试一试{
mCamera=Camera.open(getCameraId());
mCamera.setPreviewTexture(表面);
Camera.Parameters params=mCamera.getParameters();
列表大小=params.getSupportedPictureSizes();
Camera.Size=Size.get(0);
用于(int i=0;i size.width)
大小=大小。获取(i);
}
参数setPictureSize(大小、宽度、大小、高度);
参数设置闪光模式(相机参数闪光模式自动);
参数设置聚焦模式(相机参数聚焦模式连续图像);
参数设置场景模式(摄像机参数场景模式自动);
参数设置白平衡(摄像机参数白平衡自动);
参数setExposureCompensation(0);
参数setPictureFormat(ImageFormat.JPEG);
参数设置质量(100);
参数设置旋转(90);
参数设置质量(100);
参数setPreviewSize(size.width、size.height);
Camera.CameraInfo CameraInfo=新的Camera.CameraInfo();
getCameraInfo(getCameraId(),cameraInfo);
setCameraRadisPlayOrientation(this,getCameraId(),mCamera);
mCamera.startPreview();
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态无效设置和播放方向(活动,
int cameraId,android.hardware.Camera){
android.hardware.Camera.CameraInfo=
新的android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId,info);
int rotation=activity.getWindowManager().getDefaultDisplay()
.getRotation();
整数度=0;
开关(旋转){
外壳表面旋转0:度=0;断裂;
外壳表面旋转90度:角度=90度;断裂;
外壳表面旋转180度:180度;断裂;
外壳表面旋转度:270度;断裂;
}
int结果;
if(info.faceting==Camera.CameraInfo.Camera\u faceting\u FRONT){
结果=(信息方向+角度)%360;
结果=(360-结果)%360;//补偿镜像
}else{//背面
结果=(信息方向-度+360)%360;
}
摄像头。设置显示方向(结果);
}
私有int getCameraId(){
int cameraId=-1;
//搜索前向摄像头
int numberOfCameras=Camera.getNumberOfCameras();
对于(int i=0;i
这比我手机中的1300万像素照相/摄像机要低得多。可能是重复的否,答案没有帮助,已经试过了。这可能不直接适用于你的相机,但当我制作摄像机时,我将MediaRecorder对象的配置文件设置为
MediaRecorder.setProfile(CamcorderProfile.get(