Android:mPrevCallback到JPG,导致黑色图片

时间:2015-05-14 16:53:09

标签: android camera surfaceview previewcallback

我正在尝试在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函数捕获图片时它也是黑色。

我做错了什么?我该怎么调试呢? 谢谢!

1 个答案:

答案 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;
}

现在你已经缩放了位图图像。

希望这会帮助你。