【问题标题】:Java- How would I load a black and white image into binary?Java-如何将黑白图像加载到二进制文件中?
【发布时间】:2011-08-20 23:48:00
【问题描述】:

我在 FSE 模式下使用带有 swing 的 Java。我想将完全黑白图像加载为二进制格式(最好是二维数组)并将其用于基于掩码的每像素碰撞检测。我什至不知道从哪里开始,过去一个小时我一直在研究,没有发现任何相关的东西。

【问题讨论】:

    标签: java arrays image binary load


    【解决方案1】:

    只需使用ImageIO#read() 将其读入BufferedImage 并通过BufferedImage#getRGB() 获取各个像素。 0xFFFFFFFF 的值为白色,剩余部分为彩色。假设您要将白色表示为字节0,将颜色(黑色)表示为字节1,下面是一个启动示例:

    BufferedImage image = ImageIO.read(new File("/some.jpg"));
    byte[][] pixels = new byte[image.getWidth()][];
    
    for (int x = 0; x < image.getWidth(); x++) {
        pixels[x] = new byte[image.getHeight()];
    
        for (int y = 0; y < image.getHeight(); y++) {
            pixels[x][y] = (byte) (image.getRGB(x, y) == 0xFFFFFFFF ? 0 : 1);
        }
    }
    

    另见:

    【讨论】:

    • 谢谢!另外,使用这种方法加载其他图像会更有效吗?因为现在我将 getToolkit.getImage("some.jpg") 与常规图像一起使用。
    • 此代码将转置图像。要获得正确方向的图像,请将“getHeight”与“getWidth”交换,并将“getRGB”的参数更改为 y, x,而不是 x, y。
    【解决方案2】:

    如果您从 URL 读取图像,它已经是二进制格式。只需下载数据并忽略它是图像的事实。毕竟,下载中涉及的代码不会在意。假设您要将其写入文件或类似的东西,只需打开URLConnection并打开FileOutputStream,并从网络上重复读取输入流,将您读取的数据写入输出流。

    如果您不是从某个资源下载它,也可以使用ImageIO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-02
      • 2013-12-17
      • 2020-10-29
      • 1970-01-01
      • 2011-03-17
      • 2019-02-05
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多