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

从Java图像中检索像素数据

缑勇锐
2023-03-14

最近,我一直试图在Java中缩放像素数组(INT[])。我使用。setrgb()将我所有的像素数据添加到BufferedImage中。然后,BufferedImage提供了一个名为.getScaledInstance()的函数。这对我来说应该很有效,但我遇到了一个问题。.getScaledInstance()返回图像,而不是BufferedImage。对于Image对象,我不能使用.getrgb()将缩放图像中的所有像素数据(以int[]形式)添加回数组。有办法从图像文件中获取原始像素数据吗?我是不是漏掉了什么?我查看了其他问题并进行了一些Google,他们似乎只想以不同形式的数组(INT[][])或字节获得图片数据。如有任何帮助,不胜感激,谢谢。另外,Sprite是我制作的一个正在使用的类。下面是我的代码:

public Sprite scaleSprite(Sprite s, int newWidth, int newHeight){

    BufferedImage image = new BufferedImage(s.getWidth(), s.getHeight(),  BufferedImage.TYPE_INT_RGB);
    for(int y = 0; y < s.getHeight(); y++){
        for(int x = 0; x < s.getWidth(); x++){
            image.setRGB(x, y, s.getPixel(x, y));

        }
    }
    Image newImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_AREA_AVERAGING);
    Sprite newS = new Sprite(newWidth, newHeight);
    int[] pixels = new int[newWidth * newHeight];
    newImage.getRGB(0, 0, newWidth, newHeight, pixels, 0, newWidth); //This is where I am running into problems. newImage is an Image and I cannot retrieve the raw pixel data from it.

    newS.setPixels(pixels);
    return newS;
}

共有1个答案

鱼旺
2023-03-14

您可以将生成的图像绘制到BufferedImage上,如下所示:

Image newImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_AREA_AVERAGING);
BufferedImage buffImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2 = (Graphics2D) buffImg.getGraphics();
g2.drawImage(newImage, 0, 0, 10, 10, null);
g2.dispose();

也可以通过在另一个BufferedImage上绘制图像,直接缩放图像:

BufferedImage scaled = new BufferedImage(newWidth, newWidth, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2 = (Graphics2D) scaled.getGraphics();
g2.drawImage(originalImage, 0, 0, newWidth, newWidth, 0, 0, originalImage.getWidth(), originalImage.getHeight(), null);
g2.dispose();

如果两个BufferedImages具有相同的纵横比,则第二种方法将正确工作。

 类似资料:
  • 问题内容: 我正在寻找从中获取像素数据(以表格形式)的最快方法。我的目标是能够解决像素从使用图像。我发现的所有方法均不执行此操作(大多数方法都返回)。 问题答案: 我只是在玩同一个主题,这是访问像素的最快方法。我目前知道执行此操作的两种方法: 使用的答案中所述的BufferedImage 方法。 通过直接使用以下方式访问像素数组: 如果你要处理大图像并且性能是一个问题,则第一种方法绝对不是可行的方

  • 问题内容: 我正在尝试从位图获取像素rgb值。我得到了一些价值,但远没有达到我期望的价值。我也得到: 我找不到界外错误… 这是代码: 问题答案: 这个: 与此不符: 你已经计数的行和列,即包含 ÿ 值和包含 X 的值。那是倒退。

  • 是否正确?现在,当我尝试从数据库中检索blob数据时,它每次都会更改,为什么?那么如何检索此图像呢?以下是我尝试过的代码: 我没有看到任何图像。为什么?请帮忙。谢谢

  • 我一直在写一个文本检测代码,我正在使用一个二进制映射作为一个掩码来处理图像。在获得候选文本区域之后,我在图像上应用函数,然后在图像上应用掩码以获得这些区域的位置。 现在我创建了一个循环来丢弃不满足某些“子句”的区域。如果没有,我将该区域中的所有像素设为0()和二进制映射()。 当我在进入循环之前绘制地图和图像时,它们符合,但之后它们就不符合了。当我在循环后绘制图像时,显示它完美地擦除了区域,但地图

  • 互联网日安! 我正在尝试从mysql数据库检索并显示一个图像到一个图像视图(android)中。图像是blob类型。我有以下php代码从MySQL获取图像。 下面是使用JSON的android代码。 提前感谢您的帮助!

  • 我面临的问题是,在使用Gallery Intent从Gallery中选择图像时,虽然图像存储在Firebase存储中,但不显示在ImageView中。相反,占位符消失,什么也看不见。另外,我对Android和Firebase还不熟悉。 附上相同的截图。 上传前 上传后 以下是我的代码: