将PreviewFrame保存为外部存储上的JPEG(Android)

时间:2015-06-08 16:43:00

标签: java android bitmapfactory previewcallback

我正在尝试将相机的预览帧保存在设备的外部存储设备上。

这些是我的清单中的权限:

<uses-permission android:name="android.permission.CAMERA" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这是surfaceChanged()中的回调:

  mCamera.setPreviewCallback(new PreviewCallback() {

                public void onPreviewFrame(byte[] data, Camera camera) {
                    Camera.Parameters parameters = camera.getParameters();
                  Size size = camera.getParameters().getPreviewSize();
                  frames++;
                  Log.v("Framecount", "Frame: " + frames + "Größe: " + data.length);

                  int width = parameters.getPreviewSize().width;
                  int height = parameters.getPreviewSize().height;

                  ByteArrayOutputStream outstr = new ByteArrayOutputStream();
                  Rect rect = new Rect(0, 0, width, height); 
                  YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,width,height,null);
                  yuvimage.compressToJpeg(rect, 100, outstr);
                  Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size());
                  Bitmap thumbnail = Bitmap.createScaledBitmap(bmp, 20, 20, false);
                try   {
                    File sdCard = Environment.getExternalStorageDirectory();
                    File dir = new File (sdCard.getAbsolutePath() + "/.aaaaaaaaa/");
                    dir.mkdirs();
                    File file = new File(dir, "filename.jpg");
                    FileOutputStream output = new FileOutputStream(file);
                  yuvimage.compressToJpeg(rect, 90, output);
                  output.flush();
                  output.close();
                }
                catch(Exception e) {
                    Log.v("Error", "Error");
                }



                }
              });

在屏幕上显示预览帧不是问题,我无法保存它们。有没有人知道可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

如果您希望在画廊中立即显示您的jpg,请在每个新文件上调用媒体扫描程序。在此站点上搜索两行代码。