我目前正在使用以下代码将像素值数组(最初使用java.awt.image.PixelGrabber对象创建)转换为Image对象:
public Image getImageFromArray(int[] pixels, int width, int height) {
MemoryImageSource mis = new MemoryImageSource(width, height, pixels, 0, width);
Toolkit tk = Toolkit.getDefaultToolkit();
return tk.createImage(mis);
}
使用ImageIO包中的类是否可以达到相同的结果,所以我不必使用AWT工具包?
Toolkit.getDefaultToolkit()似乎并不是100%可靠的,有时会抛出AWTError,而ImageIO类应该始终可用,这就是为什么我对更改方法感兴趣。
您可以创建图像而无需使用ImageIO。只需使用与像素数组内容匹配的图像类型创建BufferedImage即可。
public static Image getImageFromArray(int[] pixels, int width, int height) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
WritableRaster raster = (WritableRaster) image.getData();
raster.setPixels(0,0,width,height,pixels);
return image;
}
使用PixelGrabber时,不要忘记在调用之前从像素阵列中提取RGBA信息getImageFromArray
。PixelGrabber
javadoc
的handlepixelmethod中有一个示例。完成此操作后,请确保BufferedImage构造函数中的图像类型为BufferedImage.TYPE_INT_ARGB
。
我正在尝试使用下面的函数将CGM文件转换为PNG。我一直在得到NullPointerException。 下面是我面临的例外 我尝试调试代码,发现ImageIO不支持CGM格式(CanDecodeInputFilter为我的CGM返回false)。关于如何将CGM转换为PNG图像的任何想法。 PS:我正在使用java 11进行开发。 提前感谢 使现代化 根据回复,我尝试了jcgm库(将核心和图像库
我正在开发一个每隔一段时间重新加载一个图像的应用程序。我这样做是为了在外出途中做出改变。我用的是ImageIO。读取(路径)以读取图像文件。 现在,当我想用我的颜料改变图像时。NET并尝试保存(覆盖)图像,绘制。NET抛出一个IOException。这可能是因为ImageIO只是在进程运行时声明图像是他的。但我就是这么想的。 代码如下: 有人知道怎么解决这个问题吗? 谢谢
问题内容: 我想将图像的颜色基础从RGB更改为其他颜色。我有一个要应用于每个像素的RGB的矩阵M,我们可以将其定义为x ij。 我目前正在迭代NumPy图像的每个像素并手动计算Mx ij。我什至无法对它们进行矢量化处理,因为RGB是1x3而不是3x1数组。 有一个更好的方法吗?也许是OpenCV或NumPy中的函数? 问题答案: 记不清执行此操作的规范方法(可能避免了转置),但这应该可行: 如果是
问题内容: 我正在尝试从的JSON输出解析环境变量。令人讨厌的是,这些环境变量没有作为有用的键值对返回。它们只是x = y字符串的数组。这是输出的相关代码段: 我想将该数组转换为这样的东西: 这样,我可以使用一条命令来获取我关心的值。我不知道如何做到这一点。 选择数据甚至将键和值拆分为单独的元素相对容易。例如,如果使用,我将获得如下数据: 但是,我不知道如何将数据转换为对象分配。似乎应该是或的某种
{4,5,1,5,7,6,8,4,1},答案是5。 对于第一个例子,子数组{5,3,1,4,2}排序后可以形成连续序列1,2,3,4,5,它们是最长的。 对于第二个示例,子数组{5,7,6,8,4}是结果子数组。
问题内容: 我有一个像下面的数组这样的像素数组,因此我要区分两个1的“组”。计划是在大量相似的像素阵列中执行此操作,因此我需要找到一种方法来有效执行此操作。 也许我可以将所有1位添加到一个单独的数组中,并进行一些搜索以找到连接的位置,但这应该是更好的方法。是否有找到这样的连接组件的算法? 问题答案: 考虑到各组之间永不相互接触,可以使用scipy.ndimage.measurements.labe