【发布时间】:2015-02-19 00:06:35
【问题描述】:
我有一个功能,它通过位图捕获视频的屏幕截图/视频帧,并将图像文件 (.png) 保存到 Android 手机上的图片目录中。但是由于某种原因,将图像保存在手机上需要很长时间。例如,我将运行应用程序/功能,文件将在 10 分钟后出现在手机上。知道为什么吗?
public static Bitmap captureVideoFrame(Activity activity, VideoView vv, String viewSource, int currPosInMs)
{
MediaMetadataRetriever mmRetriever = new MediaMetadataRetriever();
Map<String, String> headers = new HashMap<String, String>();
mmRetriever.setDataSource(viewSource, headers);
Bitmap bmFrame = mmRetriever.getFrameAtTime(currPosInMs * 1000); // unit in microsecond
if(bmFrame == null){
Toast.makeText(activity.getApplicationContext(), "Bitmap is EMPTY. Curr Position: " + currPosInMs, Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(activity.getApplicationContext(), "Bitmap is GOOD. Curr Position: " + currPosInMs, Toast.LENGTH_SHORT).show();
// Save file
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + PICTURES_DIRECTORY + Utilities.getDayTimeString() + ".png";
OutputStream fout = null;
File imageFile = new File(mPath);
try
{
fout = new FileOutputStream(imageFile);
bmFrame.compress(Bitmap.CompressFormat.JPEG, 100, fout);
fout.flush();
fout.close();
Toast.makeText(activity.getApplicationContext(), "Saved file successfully!", Toast.LENGTH_SHORT).show();
}
catch(Exception e){
}
}
return bmFrame;
}
【问题讨论】:
-
fout.close();之后尝试打开它,看看发生了什么? -
您如何确定“文件将在 10 分钟后出现在手机上”?
adb shell? DDMS 文件资源管理器?通过 USB 电缆连接设备?设备上的文件管理器?还有什么? -
我注意到文件没有立即保存。运行应用程序时,我使用的是连接到手机的 USB 数据线。
-
尝试降低 JPEG 图像的质量。我猜文件大小很大,写它需要时间。将compress调用中的参数“100”改为“75”——bmFrame.compress(Bitmap.CompressFormat.JPEG, 75, fout);
-
顺便说一句,您的描述说您正在保存 PNG,但您的代码显示它的 JPEG。将JPEG更改为PNG以获取png图像。在这种情况下,质量参数不会有任何影响。
标签: android file outputstream android-file android-videoview