您的位置:首页 > 其它

通过文件流将很多图片存入SD卡

2015-02-10 11:01 155 查看
1. 为什么会写这篇文章?

上周三给我分配了一个任务: YUV转RGB. 把YUV转RGB之后,如何验证转换的RGB数据是否正确呢?我采取的做法是:把转换后的RGB数据写入文件,此文件播放时如果与录制或预览的一样(包括亮度与色度),那么证明YUV转RGB正确,否则错误。因此就涉及到“通过文件流将很多图片存入SD卡”

2. 如何通过文件流将很多图片存入SD卡?

思路: RGB-------->Bitmap------->mBitmap.compress(Bitmap.CompressFormat.PNG,90,fos)



先把代码贴上来:

public void WriteRGBToFile(byte[] frgb)

{

Bitmap mBitmap = MyBitmapFactory.createMyBitmap(frgb, width, height);

//创建文件夹

File folder = new File(Environment.getExternalStorageDirectory() + "/bmpfolder_test");

if(!folder.exists())

{

folder.mkdir();

}

//每帧数据最终以PNG的形式展示出来,一张PNG对应一个文件,所以每一帧数据进来后都需要新建一个文件。

f = new File(folder.getPath(), "/" + (n++)+".bmp");

if (!f.exists()) {

try {

f.createNewFile();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//创建文件流

try {

fos = new FileOutputStream(f);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//压缩成PNG图片

mBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);

try {

fos.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}



在onPreviewFrame里调用上述方法(WriteRGBToFile),也就是每一帧数据进来之后都会调用WriteRGBToFile方法。

3. 注意点:



(3.1)每进来一帧数据都会创建一个文件:

f = new File(folder.getPath(), "/" + (n++)+".bmp");

if (!f.exists()) {

try {

f.createNewFile();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

(3.2)创建文件夹的代码也在WriteRGBToFile方法里,而不是在WriteRGBToFile方法之外



File folder = new File(Environment.getExternalStorageDirectory() + "/bmpfolder_test");

if(!folder.exists())

{

folder.mkdir();

}

(3.3)每帧数据压缩成PNG之后都要把流关闭,而不是在退出程序时关闭,似乎是一个文件对应一个流,有5个文件就有5个文件流

f = new File(folder.getPath(), "/" + (n++)+".bmp");

if (!f.exists()) {

try {

f.createNewFile();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//创建文件流

try {

fos = new FileOutputStream(f);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//压缩成PNG图片

mBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);

try {

fos.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

4. 总结:

Bitmap -----> PNG

把文件压缩成PNG
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: