android InputStream 转byte[]

  public static byte[] streamToBytes(InputStream input) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int n = 0;
        try {
            while (-1 != (n = input.read(buffer))) {
                output.write(buffer, 0, n);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return output.toByteArray();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 你可以使用 Android 中的 BitmapFactory 类来将 RGBA 格式的字节数组换为 Bitmap 对象。 首先,需要将字节数组换为输入流,然后使用 BitmapFactory 的 decodeStream 方法将输入流解码为位图。 例如: ``` byte[] data = // RGBA 格式的字节数组 InputStream is = new ByteArrayInputStream(data); Bitmap bitmap = BitmapFactory.decodeStream(is); ``` 如果你想自定义解码的选项,你可以使用 BitmapFactory 的 decodeByteArray 方法。它接受三个参数:字节数组、偏移量和长度。 例如: ``` byte[] data = // RGBA 格式的字节数组 BitmapFactory.Options options = new BitmapFactory.Options(); // 设置解码选项 Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options); ``` 希望这对你有帮助。 ### 回答2: 在Android中,可以使用以下方法将一个RGBA的byte数组换为Bitmap对象: ```java public Bitmap byteToBitmap(byte[] byteArray) { Bitmap bitmap; // 获取byte数组所包含的像素点个数 int pixels = byteArray.length / 4; // 创建一个与byte数组大小相同的int数组,用于存储换后的像素点 int[] intArray = new int[pixels]; // 将byte数组的每4个字节依次换为一个int类型的像素点 for (int i = 0; i < pixels; i++) { int r = byteArray[i * 4] & 0xFF; int g = byteArray[i * 4 + 1] & 0xFF; int b = byteArray[i * 4 + 2] & 0xFF; int a = byteArray[i * 4 + 3] & 0xFF; // 将RGBA值合并为一个int类型的像素点 intArray[i] = (a << 24) | (r << 16) | (g << 8) | b; } // 根据换后的int数组创建Bitmap对象 bitmap = Bitmap.createBitmap(intArray, pixels, 1, Bitmap.Config.ARGB_8888); return bitmap; } ``` 以上代码中,首先获取byte数组的大小,并创建一个与byte数组大小相同的int数组,用于存储换后的像素点。然后,使用循环遍历byte数组中的每4个字节,分别获取RGBA值,并将它们合并为一个int类型的像素点。最后,使用Bitmap的静态方法`createBitmap()`根据换后的int数组创建Bitmap对象,并将其返回。 请注意,以上代码仅适用于RGBA的byte数组,每个像素点由4个字节组成,分别表示红色、绿色、蓝色和透明度。如果byte数组的格式与此不同,需要对代码进行相应的修改。 ### 回答3: 在Android开发中,可以使用RGBA字节数组将图像换为Bitmap对象。以下是实现此换的步骤: 1. 首先,创建一个空的Bitmap对象,并指定宽度和高度。可以使用Bitmap类的createBitmap方法来实现: ```java Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); ``` 2. 然后,获取Bitmap对象的像素字节数组: ```java int[] pixels = new int[width * height]; bitmap.getPixels(pixels, 0, width, 0, 0, width, height); ``` 3. 接下来,遍历像素字节数组,并将RGBA字节数组中的值赋给相应的像素。假设RGBA字节数组为`byte[] rgbaBytes`: ```java int offset = 0; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int pixel = 0xff000000 | // 设置alpha位,这里设为不透明 ((rgbaBytes[offset] & 0xff) << 16) | // 设置红色分量 ((rgbaBytes[offset + 1] & 0xff) << 8) | // 设置绿色分量 (rgbaBytes[offset + 2] & 0xff); // 设置蓝色分量 pixels[y * width + x] = pixel; offset += 4; // RGBA字节数组中每个像素占4个字节 } } ``` 4. 最后,将修改后的像素数组重新设置给Bitmap对象: ```java bitmap.setPixels(pixels, 0, width, 0, 0, width, height); ``` 通过以上步骤,就可以将RGBA字节数组换为Bitmap对象。请注意,这里假设RGBA字节数组的排列顺序为R、G、B、A,每个分量占一个字节。如果排列顺序或每个分量的字节数不同,需要相应地修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_今晚不加班

谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值