我开发了自己的相机应用程序,具有一些功能,相机运行良好。 问题是捕获的图像在 SD 卡上模糊,并且图像质量和尺寸在不同的手机上有所不同,即使相机像素良好且相同。 我不知道在应用程序中捕获和保存图像有什么问题。我遵循了开发者页面的指南和 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 {
}
最佳答案
这段代码看起来不错,我只是想知道,您保存文件的扩展名为 .png
:通常只有 jpeg
可用...
你打过电话吗setPictureSize() ?您需要调用它,因为未指定默认大小并且可能太小 - 模糊。您需要始终调用 setPreviewSize()以及。
选择正确的尺寸很棘手。始终从 getSupportedPictureSizes() 返回的尺寸中选择一个和 getSupportedPreviewSizes() .预览大小必须与显示预览的 SurfaceView
具有相同的纵横比,否则预览将被拉伸(stretch)。根据需要选择图片大小。
我在相机方面遇到了很多麻烦。如果您严格遵守Google documentation,您将做到最好,否则相机会出现异常行为。它可能在一台设备上工作,但在另一台设备上崩溃。例如,我尝试在 Activity 的 onCreate
方法中设置大小,但这没有用。
关于android - 在我的 Android 相机应用程序中拍摄的图像很模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009913/