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

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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值