Android中Bitmap对象和字节流之间的相互转换

android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
import java.io.BufferedOutputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.graphics.Matrix;  
  
public class ImageDispose {  
      
      
      
    /** 
     * @param 将图片内容解析成字节数组 
     * @param inStream 
     * @return byte[] 
     * @throws Exception 
     */  
    public static byte[] readStream(InputStream inStream) throws Exception {  
        byte[] buffer = new byte[1024];  
        int len = -1;  
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
        while ((len = inStream.read(buffer)) != -1) {  
            outStream.write(buffer, 0, len);  
        }  
        byte[] data = outStream.toByteArray();  
        outStream.close();  
        inStream.close();  
        return data;  
  
    }  
    /** 
     * @param 将字节数组转换为ImageView可调用的Bitmap对象 
     * @param bytes 
     * @param opts 
     * @return Bitmap 
     */  
    public static Bitmap getPicFromBytes(byte[] bytes,  
            BitmapFactory.Options opts) {  
        if (bytes != null)  
            if (opts != null)  
                return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,  
                        opts);  
            else  
                return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);  
        return null;  
    }  
    /** 
     * @param 图片缩放 
     * @param bitmap 对象 
     * @param w 要缩放的宽度 
     * @param h 要缩放的高度 
     * @return newBmp 新 Bitmap对象 
     */  
    public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h){  
        int width = bitmap.getWidth();  
        int height = bitmap.getHeight();  
        Matrix matrix = new Matrix();  
        float scaleWidth = ((float) w / width);  
        float scaleHeight = ((float) h / height);  
        matrix.postScale(scaleWidth, scaleHeight);  
        Bitmap newBmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,  
                matrix, true);  
        return newBmp;  
    }  
      
    /** 
     * 把Bitmap转Byte 
     */  
    public static byte[] Bitmap2Bytes(Bitmap bm){  
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
        return baos.toByteArray();  
    }  
    /** 
     * 把字节数组保存为一个文件 
     */  
    public static File getFileFromBytes(byte[] b, String outputFile) {  
        BufferedOutputStream stream = null;  
        File file = null;  
        try {  
            file = new File(outputFile);  
            FileOutputStream fstream = new FileOutputStream(file);  
            stream = new BufferedOutputStream(fstream);  
            stream.write(b);  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (stream != null) {  
                try {  
                    stream.close();  
                } catch (IOException e1) {  
                    e1.printStackTrace();  
                }  
            }  
        }  
        return file;  
    }  
          
}  
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 可以使用ContentResolver的openInputStream方法将Uri转换字节流,示例代码如下: ```java public static byte[] uriToBytes(Context context, Uri uri) throws IOException { InputStream inputStream = context.getContentResolver().openInputStream(uri); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, , len); } return byteArrayOutputStream.toByteArray(); } ``` 其,context为上下文对象,uri为需要转换的Uri对象。 ### 回答2: 在Android开发,将Uri转换字节流的方式有几种。 一种方式是使用ContentResolver类的openInputStream()方法。可以通过getContentResolver()方法获取ContentResolver的实例对象。然后,调用openInputStream()方法,传入Uri参数来获取输入流。最后,可以通过输入流读取数据并将其转换为字节数组。 另一种方式是使用File类的inputStream()方法。可以通过Uri获取File对象,然后调用File的inputStream()方法获取输入流。最后,同样可以通过输入流读取数据并转换为字节数组。 例如,以下是使用ContentResolver类的openInputStream()方法将Uri转换字节流的示例代码: Uri uri = Uri.parse("content://com.example.provider/test"); ContentResolver contentResolver = getContentResolver(); InputStream inputStream = contentResolver.openInputStream(uri); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, bytesRead); } byte[] byteArray = byteArrayOutputStream.toByteArray(); inputStream.close(); byteArrayOutputStream.close(); 通过以上代码,我们可以将Uri转换为字节数组,然后可以根据需求进行相关处理,例如将字节数组保存到本地文件或者进行网络上传等操作。 ### 回答3: 在Android开发,将Uri转换字节流的方式有多种方法。以下是其一种常用的方式: 首先,我们需要从Uri获取输入流。可以通过ContentResolver类的openInputStream()方法来获得: ```java InputStream inputStream = getContentResolver().openInputStream(uri); ``` 接下来,我们可以使用ByteArrayOutputStream类将输入流转换字节流ByteArrayOutputStream类可以在内存创建一个字节数组缓冲区,并提供了一些方法来简化字节流的操作: ```java ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, len); } ``` 最后,我们可以使用toByteArray()方法将字节流转换成字节数组: ```java byte[] byteArray = byteArrayOutputStream.toByteArray(); ``` 现在,我们已经成功将Uri转换字节流。我们可以将字节流用于后续的操作,如保存到文件或上传到服务器等。 需要注意的是,在这个过程可能会出现异常,如FileNotFoundException和IOException。为了确保代码的健壮性,应该在合适的地方进行异常处理。 除了上述方法,还有其他一些方式可以实现相同的效果,比如使用FileProvider或通过Bitmap压缩等方式。选择哪种方式取决于具体的需求和场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值