美文网首页
错误记录二:byte[] 转图片时失败的问题

错误记录二:byte[] 转图片时失败的问题

作者: 简秋默 | 来源:发表于2019-10-28 17:14 被阅读0次

    在一次使用相机获取图片并保存图片的过程中,byte[] 转图片/图片文件一直不成功,也不报错,折磨了我好一会,不明白为什么这样。后来借鉴网上的思路,对byte[] 进行转码处理,然后再转为图片/图片文件。自己试了一下,确实可以解决问题,虽然原因还是不明确,但也记录一下,以供以后学习参考。

    byte[]转为图片文件时的原代码:

    private void bytesToImageFile(byte[] data, String path) {
    
            try {
    
                File file = new File(path);
    
                if(file.exists()){
    
                    file.delete();
    
                    file.createNewFile();
    
                }
    
                FileOutputStream fos = new FileOutputStream(file);
    
                fos.write(data, 0, data.length);
    
                fos.flush();
    
                fos.close();
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
    
    }
    

    此段代码运行后能创建图片文件,但图片文件为损坏的文件,无法使用。

    byte[]转为Bitmap时的原代码:

    
    private static Bitmap byteToBitmap(byte[] data){
    
            return BitmapFactory.decodeByteArray(data, 0, data.length);
    
    }
    
    

    此段代码运行后返回null。

    转码处理,方法如下:

    
    /**
    
    * 转码处理
    
    * @param data
    
    * @param width 图片宽度
    
    * @param height 图片高度
    
    * @return
    
    */
    
    private static byte[] transcodeProcess(byte[] data, int width, int height){
    
            YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, width, height, null);
    
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
            yuvImage.compressToJpeg(new Rect(0, 0, width, height), 80, baos);
    
            byte[] jdata = baos.toByteArray();
    
            return jdata;
    
    }
    
    

    在上面byte转图片文件和Bitmap的过程中,加入转码处理,即可达到预期目的。

    byte转图片文件:

    
    private void bytesToImageFile(byte[] data, String path) {
    
            try {
    
                File file = new File(path);
    
                if(file.exists()){
    
                    file.delete();
    
                    file.createNewFile();
    
                }
    
                // 转码处理
    
                byte[] jdata = transcodeProcess(data, 100, 100);
    
                FileOutputStream fos = new FileOutputStream(file);
    
                fos.write(data, 0, data.length);
    
                fos.flush();
    
                fos.close();
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
    
    }
    
    

    byte转Bitmap:

    
    private static Bitmap byteToBitmap(byte[] data){
    
            // 转码处理
    
            byte[] jdata = transcodeProcess(data, 100, 100);
    
            return BitmapFactory.decodeByteArray(jdata , 0, jdata.length);
    
    }
    
    

    相关文章

      网友评论

          本文标题:错误记录二:byte[] 转图片时失败的问题

          本文链接:https://www.haomeiwen.com/subject/wiibvctx.html