我开发了自己的相机应用程序,具有一些功能,相机工作正常。 问题是捕获的图像在SD卡上模糊,图像质量和尺寸在不同的手机上变化,甚至相机像素都很好和相同。 我不知道在app中捕获和保存图像有什么问题。我遵循了开发者页面的指南和github的一些样本。
我无法找到问题的确切解决方案,但有些示例实现了位图,而且这些图片质量很好。我不知道位图
任何解决这个问题的想法都会对我的进一步发展有所帮助。
pictureCallBack的代码
Camera.AutoFocusCallback autoFocusCallback = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
camera.takePicture(shutterCallback, rawPictureCallBack, null, jpegPictureCallback);
}
};
保存图像的线程
FileOutputStream outStream = null;
/**
* Write to SD Card
*/
try {
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/MyCamera");
dir.mkdirs();
String fileName = String.format("%d.png", System.currentTimeMillis());
File outFile = new File(dir, fileName);
outStream = new FileOutputStream(outFile);
outStream.write(data[0]);
outStream.flush();
outStream.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
retrieveLastImage();
showCustomAlert();
}
});
Log.d(DEBUG_TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath());
refreshGallery(outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
答案 0 :(得分:1)
此代码看起来没问题,我只是想知道,您使用.png
扩展程序保存文件:通常只有jpeg
可用...
您致电setPictureSize()了吗?您需要调用它,因为默认大小未指定且可能太小 - 模糊。您还需要始终致电setPreviewSize()。
选择正确的尺码很棘手。始终从getSupportedPictureSizes()和getSupportedPreviewSizes()返回的尺寸中选择一个。预览大小必须与SurfaceView
具有相同的宽高比,您可以在其中显示预览,或者预览将被拉伸。根据您的需要选择图片大小。
onCreate
方法中设置大小,但这不起作用。
答案 1 :(得分:0)
要引用以下链接,为什么我们的相机编程会产生模糊图像。
https://developer.android.com/training/camera/photobasics
然后我们必须点击此链接以获得清晰的图像。
https://developer.android.com/guide/topics/media/camera#java
在这里
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(imageBitmap);
}