Android -- 将NV21图像保存成JPEG

//保存一张照片
String fileName = "IMG_" + String.valueOf(index) + ".jpg";  //jpeg文件名定义
File sdRoot = Environment.getExternalStorageDirectory();    //系统路径
String dir = "/jpeg/";   //文件夹名
File mkDir = new File(sdRoot, dir);
if (!mkDir.exists())
{
   mkDir.mkdirs();   //目录不存在,则创建
}

File pictureFile = new File(sdRoot, dir + fileName);
if (!pictureFile.exists()) {
   try {
       pictureFile.createNewFile();

       FileOutputStream filecon = new FileOutputStream(pictureFile);

       YuvImage image = new YuvImage(data, ImageFormat.NV21, width, height, null);   //将NV21 data保存成YuvImage
       //图像压缩
       image.compressToJpeg(
               new Rect(0, 0, image.getWidth(), image.getHeight()),
               70, filecon);   // 将NV21格式图片,以质量70压缩成Jpeg,并得到JPEG数据流

   }catch (IOException e)
   {
       e.printStackTrace();
   }
}

该方法,常常在Camera.PreviewCallback中采用:

@Override
public void onPreviewFrame(byte[] data, Camera camera) {

}

将NV21数据压缩成JPEG,并得到JPEG byte数据,解压JPEG byte数据成一张Bitmap

@Override
public void onPreviewFrame(byte[] bytes, Camera camera) {

    YuvImage image = new YuvImage(bytes, ImageFormat.NV21, width, height, null);            //ImageFormat.NV21  640 480
    ByteArrayOutputStream outputSteam = new ByteArrayOutputStream();
    image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 70, outputSteam); // 将NV21格式图片,以质量70压缩成Jpeg,并得到JPEG数据流
    byte[] jpegData = outputSteam.toByteArray();                                                //从outputSteam得到byte数据

    Options options = new BitmapFactory.Options();
    options.inSampleSize = 1;
    Bitmap bmp = BitmapFactory.decodeStream(jpegData, null, options);
}

http://my.oschina.net/eclipse88/blog/80115

时间: 2024-10-28 16:36:01

Android -- 将NV21图像保存成JPEG的相关文章

Android -- 几种保存成jpeg文件的形式

//1.采用NV21格式 YuvImage类进行保存 效率很高 String fileName = "IMG_" + String.valueOf(index) + ".jpg"; File sdRoot = Environment.getExternalStorageDirectory(); String dir = "/picture/"; File mkDir = new File(sdRoot, dir); if (!mkDir.exis

PHP《将画布(canvas)图像保存成本地图片的方法》

用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审结束时用笔在平板电脑上进行电子签名. 这需要我们评审软件里提供这样一个功能:打开浏览器,登录,进入评审意见页,页面最下部有个方块区域,用户在这里用触摸笔进行签名,然后这个签名将会保持 的服务器上. 这样的一个需求在当时是让我大费周折,但如今想起来,如果用html5的canvas实现,真是太简单了.在

android脚步---将layout和其输出一起保存成图片

public void convertViewToBitmap(View view) { //View view = getLayoutInflater().inflate(R.layout.test_layout, null); view.setDrawingCacheEnabled(true); view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0

在WPF程序中将控件所呈现的内容保存成图像(转载)

在WPF程序中将控件所呈现的内容保存成图像 转自:http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 有的时候,我们需要将控件所呈现的内容保存成图像保存下来,例如:InkCanvas的手写墨迹,WebBrowser中的网页等.可能有人会说,这个不就是截图嘛,找到控件的坐标和大小,调用截图API不就可以了嘛.的确,对于规则的控件来说,通过截图的却可以实现,可是,如果控件不规则或不透明度不是100%,则会把其背景控件的视觉效

深度学习文章3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件

将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件 在搭建好caffe环境之后,我们往往需要对自己的图像数据进行训练/测试,我们的图像数据往往时图片文件,如jpg,jpeg,png等,然而在caffe中我们需要使用的数据类型是lmdb或leveldb,例如:在之前测试MNIST数据集< 深度学习文章2:使用MNIST数据集验证Caffe是否安装成功 >时,我们运行脚本create_mnist.sh就是生成对应的db文件,运行后在~/caffe/examples/mnis

OCR文字识别软件中怎么把图像转换成HTML

之前给大家介绍了使用OCR文字识别软件ABBYY FineReader Mac版将PDF转换成HTML文档(详见PDF转换成HTML文档首选ABBYY Mac),其实ABBYY FineReader无论Mac版还是Windows版都可以实现这一点,除此之外还可以将图像文件转换成HTML文档,本文具体讲讲这一功能. ABBYY FineReader是一款OCR图文识别软件,当前最新版本为ABBYY FineReader 12,可快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜

Android开发把项目打包成apk-(转)

做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk".将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装.Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装.生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非

OpenGL中的深度、深度缓存、深度测试及保存成图片

1.深度 所谓深度,就是在openGL坐标系中,像素点Z坐标距离摄像机的距离.摄像机可能放在坐标系的任何位置,那么,就不能简单的说Z数值越大或越小,就是越靠近摄像机. 2.深度缓冲区 深度缓冲区原理就是把一个距离观察平面(近裁剪面)的深度值(或距离)与窗口中的每个像素相关联.      首先,使用glClear(GL_DEPTH_BUFFER_BIT),把所有像素的深度值设置为最大值(一般是远裁剪面).      然后,在场景中以任意次序绘制所有物体.硬件或者软件所执行的图形计算把每一个绘制表面

kinect2.0 基础篇第3篇 用C#在Visual Studio上编写把深度图像转换成彩色图像

本示例实现的功能有:有两个Radiobutton控件  选一个,点击启动按钮, 第一个是将深度图像转换成彩色图像 第二个是将深度图像做一些简单处理(例如太暗的调白一点) 涉及到一点遥感图像处理知识,将深度数据值转换为色调和饱和度 遥感图像处理那块不懂,有兴趣的自己可以研究研究,代码的基于kinect1的教程,慢慢尝试出来的,虽然功能实现了,但是原理还不是很懂 <Window x:Class="EnhancedDepthWPF.MainWindow" xmlns="htt