当前位置: 首页 > 知识库问答 >
问题:

如何将原始数据数组转换为BufferedImage

钱承允
2023-03-14

我在Java中有一个tiff图像的INT[2048][2048]原始数据数组。我想把那个数组转换回BufferedImage。我该如何进行?

共有1个答案

娄学文
2023-03-14

当您说原始数据时,这并不能说明数据的格式,我假设它是最常见的格式:ARGB。然后,通过使用BufferedImage.setrgb()方法简单地传输每个像素,就可以将其转换为BufferedImage:

public static BufferedImage toBufferedImage(int[][] rawRGB) {
    int h = rawRGB.length;
    int w = rawRGB[0].length;
    BufferedImage i = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    for (int y=0; y<h; ++y) {
        for (int x=0; x<w; ++x) {
            int argb = rawRGB[y][x];
            i.setRGB(x, y, argb);
        }
    }
    return i;
}

你明白了,只需一个像素一个像素地复制到BufferedImage中。

如果镜像似乎在一个或两个维度中镜像,则需要在setRGB调用中分别用(w-x-1、h-y-1)进行校正。如果图像看起来是旋转的,那么用w和h交换和setRGB(y,x,argb)创建图像。如果颜色出现倒置/乱码,找出argb值中的通道顺序,并相应地移动它,使通道顺序为A、R、G、B。像素也可能处于完全不同的颜色模型中--您需要找出它们处于什么颜色模型中,并将每个像素转换为argb。

 类似资料:
  • 我有一个文件包。crd。伊滕是这样的 我需要将其导入到以下格式的excel文件中。 我试过这个代码,但不起作用 请帮忙

  • 问题内容: 我正在尝试使用以下代码将包含Integer对象的ArrayList转换为原始int [],但它会引发编译时错误。是否可以用Java进行转换? 问题答案: 你可以进行转换,但是我认为没有内置的功能可以自动进行转换: (请注意,如果其中一个或任何一个元素为,则会抛出。) 编辑:根据评论,你可能希望使用列表迭代器来避免诸如:

  • 我正在使用ADB拍摄android设备的屏幕截图,并将屏幕截图作为原始字节数据接收。 我知道通过的原始字节数据是rgba格式的 红色偏移量为0,绿色偏移量为8,蓝色偏移量为16,Alpha偏移量为24,每个值为1字节。这构成了整个字节数组。 我正在尝试将这个字节数组转换为C#中的位图,它在大多数情况下都工作正常,图像在各个方面看起来都是正确的,除了它带有一个“蓝色色调”——颜色是关闭的。 以下是我

  • 我有模量 目前,我正在提取完整的260个字节(指数为4个字节,模数为256个字节)并编码为base 64。我使用以下shell命令这样做: 这给我以下字符串: 现在,当我拿钥匙的时候。pem密钥对表示模数 我得到这个字符串(我已经省略了标题 您可以看到,我提取的密钥数据和base64编码的密钥数据实际上存在于从密钥中提取的有效公钥数据的数据中。pem使用openssl。然而,开头有45个字符,我自

  • 问题内容: 我一直在尝试创建自己的库,以使用反射来检查方法命名模式和方法返回类型,以从类到xml以及从xml到类实例的原始类型进行序列化和反序列化。 到目前为止,我已经能够使用所有基本的基本类型进行此操作,但是我被困在序列化相同基本类型的数组上。 例如,我调用class方法来获取原语数组: 该方法将仅返回一个原始数组等。尽管我们不知道它将是哪一个。 我试过使用通用的 但这不能让我从原始数组转换为对

  • 问题内容: 这可能是一个简单的,总机问题,但我的第一次尝试令人惊讶地完全失败了。我想获取一组原始的long并将其转换成一个列表,我试图这样做: 什么是正确的方法? 问题答案: 我发现使用apache commons lang ArrayUtils(JavaDoc,Maven依赖项)很方便 它还具有反向API 编辑:更新以提供完整的转换为列表,如注释和其他修复建议。