【问题标题】:Parsing Java-generated image in Android application在 Android 应用程序中解析 Java 生成的图像
【发布时间】:2011-11-15 23:43:20
【问题描述】:

我正在制作一个显示房间图片的应用程序。当用户单击图片时,会弹出一个带有对象单词的图像,并且设备会说出名称。为了做到这一点,我加载了一个图案图像,其中在对象的位置有彩色块,以及一个文本文件,其中不同的对象名称映射到块的特定颜色。

我还制作了一个 Java 应用程序,可以用来创建这两个文件。用户在图像上绘制矩形,应用程序将绘制的矩形保存到新的图像文件中。

这是创建/保存图像的 Java 代码:

    BufferedImage i = new BufferedImage(img.getWidth(), img.getHeight(),        
            BufferedImage.TYPE_INT_RGB);
    Graphics g = i.getGraphics();
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, i.getWidth(), i.getHeight());  

    //draw all the rectangles on the image
    for(Rectangle r: rects.keySet()){
        g.setColor(rects.get(r));   
        g.fillRect(r.x, r.y, r.width, r.height);
    }

    //write the BufferedImage to the file
    try {
        ImageIO.write(i, "png", saveTo);
    } catch (IOException e) {
        e.printStackTrace();
    }

当我在 Photoshop、Paint 等中打开图片时,它会验证彩色块是它们应有的颜色。

当我将它们加载到 Android 设备中时,它们的颜色不同。它们在每种颜色上的差异范围为 1-3(因此 25:0:0 的颜色被解读为 24:0:0 或 22:0:0)。

在设备上,我将图像加载为位图,并使用 TouchEvent.getX() 和 getY() 来查找图像上的位置。然后我使用 Bitmap.getPixel(x,y) 来获取特定的颜色。

如果我使用 Photoshop 或 Paint 之类的编辑器,我会得到完美的图像,并且可以正常阅读。我的用户要求提供他们自己的编辑器应用程序,因此它也可以创建配置文件。

抱歉这么久,感谢您的帮助!

【问题讨论】:

    标签: java android colors bitmap rgb


    【解决方案1】:

    将您的彩色块加载为资产,而不是资源。 Android 会压缩并重新打包资源文件夹中的位图以最小化它们的大小。我相信压缩是导致您的颜色发生变化的原因。

    使用 ADB 从设备中提取图像以查看设备上的图像是否真的不同可能会很有趣。我希望它是。

    assets 文件夹中包含的位图根本不会被处理。将这些用于需要保持当前质量的图像。

    【讨论】:

    • 我将图像作为资产加载。我刚刚意识到我在 Java 代码中设置了错误的位图(我使用 TYPE_INT_RGB 而不是 TYPE_INT_ARGB)
    猜你喜欢
    • 2012-05-08
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多