我正在尝试在surfaceview上捕获相机的预览,将其作为JPEG保存在内部存储器中。我在这个网站上找到了一些代码,这主要是我想要的,但是将图像保存到SD卡。我更改了它,并提出了以下代码。
<input type="submit" value="Sold Out" id="add" class="btn add-to-cart disabled" disabled="disabled" style="opacity: 0.5;">
预览显示在surfaceview上,mPrevCallback被触发。它成功保存了不同大小(250~500Kb)的图片,但它们都是黑色的。当我尝试使用camera.takePicture函数捕获图片时它也是黑色。
我做错了什么?我该怎么调试呢? 谢谢!
答案 0 :(得分:0)
使用此意图拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), AppInfo.getInstance().getCurrentLoginUserInfo().getId()+".jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
intent.putExtra("return-data", true);
startActivityForResult(intent, 1);
以及您的活动结果.... Note Bitmap bitmap = getScaledBitmap(uri.getPath(), 200, true);
200是您的最大图片尺寸。
if(requestCode == 1)
{
String base = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
final String imgPath = base + "/" +AppInfo.getInstance().getCurrentLoginUserInfo().getId()+".jpg";
File file = new File(imgPath);
if (file.exists())
{
Uri uri = Uri.fromFile(file);
Log.d(TAG, "Image Uri path: " + uri.getPath());
Bitmap bitmap = getScaledBitmap(uri.getPath(), 200, true);
}}
此方法在调整大小后返回图像位图 -
private Bitmap getScaledBitmap(String imagePath, float maxImageSize, boolean filter) {
FileInputStream in;
BufferedInputStream buf;
try {
in = new FileInputStream(imagePath);
buf = new BufferedInputStream(in);
Bitmap realImage = BitmapFactory.decodeStream(buf);
float ratio = Math.min(
(float) maxImageSize / realImage.getWidth(),
(float) maxImageSize / realImage.getHeight());
int width = Math.round((float) ratio * realImage.getWidth());
int height = Math.round((float) ratio * realImage.getHeight());
Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width, height, filter);
return newBitmap;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
现在你已经缩放了位图图像。
希望这会帮助你。