Сохранить PreviewFrame в формате JPEG на внешнем хранилище (Android)
Я пытаюсь сохранить кадры предварительного просмотра с камеры на внешнем накопителе моего устройства.
Вот разрешения в моем Манифесте:
<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 ответ
Решение
Если вы хотите, чтобы ваш jpg был сразу же виден в Галерее, вызывайте медиа-сканер для каждого нового файла. Найдите две строки кода на этом сайте.