当前位置: 首页 > 面试题库 >

将数据类型TYPE_4BYTE_ABGR的字节数组转换为BufferedImage

胡博艺
2023-03-14
问题内容

我有一个类型为TYPE_4BYTE_ABGR的字节数组,我知道它的宽度和高度,我想将其更改为BufferedImage,有什么想法吗?


问题答案:

可能效率不是很高,但是BufferedImage可以通过以下方式将a转换为另一种类型:

public static BufferedImage convertToType(BufferedImage image, int type) {
    BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), type);
    Graphics2D graphics = newImage.createGraphics();
    graphics.drawImage(image, 0, 0, null);
    graphics.dispose();
    return newImage;
}

关于您要实现的方法,您必须知道图像的宽度或高度才能将a转换byte[]为a BufferedImage

编辑:
一种方法是将转换byte[]int[](数据类型TYPE_INT_ARGB)并使用setRGB

int[] dst = new int[width * height];
for (int i = 0, j = 0; i < dst.length; i++) {
    int a = src[j++] & 0xff;
    int b = src[j++] & 0xff;
    int g = src[j++] & 0xff;
    int r = src[j++] & 0xff;
    dst[i] = (a << 24) | (r << 16) | (g << 8) | b;
}
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
image.setRGB(0, 0, width, height, dst, 0, width);


 类似资料:
  • 我有一个非常具体的要求。我有一个java应用程序,在这里我必须将字节数组转换为具有int、String等java类型的消息。消息的结构在c中定义如下- 我在java应用程序中收到的是字节数组。我不知道c应用程序是否使用proto缓冲区或任何其他方式来转换为字节数组。但是,如果我逐个字节地解析数组,我可以得到值。例如- 这一行将返回正确的id值(结构中的第一个属性是int)。 我的问题是——如果我为

  • 问题内容: 我有一个要写入磁盘的数组。最有效的磁盘I / O功能采用字节数组,例如: …所以我想先将其转换为(每个8字节)。我正在努力寻找一种干净的方法来做到这一点。 似乎不允许直接类型转换: 通过遍历数组很容易进行转换,例如: …但是,这似乎远比简单地将long []视为一系列字节有效。 有趣的是,在 读取 文件时,使用“缓冲区”很容易将“从”转换为“ long ” : …但是我似乎找不到找到相

  • 问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非

  • 所以,实际上我对Java编程语言还是新手,并且还在学习如何转换数据类型,所以在这种情况下,我很难将字节转换为短字节。你们能帮帮我吗?? 所以在这种情况下,我可以正常地从(int)转换为(long)数据类型,因为(long)数据大小大于(int)。这与我尝试将其从(short)转换为(int)时的情况相同。但为什么我不能使用这个概念将数据类型从(byte)转换为(short)??即使(短)数据大小大

  • 我正在使用RSA算法生成公钥和私钥 然后使用Base64编码器对这些密钥进行编码,并将其保存到数据库中。

  • 问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法: