Java 相当于 JavaScript 的 Canvas getImageData
我正在将 HTML5 的 Canvas 示例移植到 Java,到目前为止一切顺利,直到我进行此函数调用:
Canvas.getContext('2d').getImageData(0, 0, 100, 100).data
我用 google 搜索了一段时间,找到了画布规范的此页面
读完后,我在下面创建了这个函数:
public int[] getImageDataPort(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
int[] ret = new int[width * height * 4];
int idx = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int color = image.getRGB(x, y);
ret[idx++] = getRed(color);
ret[idx++] = getGreen(color);
ret[idx++] = getBlue(color);
ret[idx++] = getAlpha(color);
}
}
return ret;
}
public int getRed(int color) {
return (color >> 16) & 0xFF;
}
public int getGreen(int color) {
return (color >> 8) & 0xFF;
}
public int getBlue(int color) {
return (color >> 0) & 0xFF;
}
public int getAlpha(int color) {
return (color >> 24) & 0xff;
}
Java Graphics API 上有任何类内置了这个函数,否则我应该使用这个函数我创造的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为您在标准 Java API 中找到的最接近的东西是
Raster
类。您可以获取WritableRaster< /code>
(用于低级图像操作)通过 BufferedImage.getRaster
。然后,Raster
类提供以下方法:getSamples
填充int[]
与图像数据。I think the closest thing you'll find in the standard Java API is the
Raster
class. You can get hold of aWritableRaster
(used for low-level image manipulation) throughBufferedImage.getRaster
. TheRaster
class then provides methods such asgetSamples
which fills anint[]
with image data.谢谢 aioobe,我查看了
WritableRaster
类,发现getPixels
函数完全符合我的需要,最终结果是:唯一可能发生的问题是当与问题代码相比,
image.getType
不是一种支持 alpha 的类型,导致int[] ret
较小,但可以简单地将图像类型:Thanks aioobe, i've looked at the
WritableRaster
class and found thegetPixels
function which does exactly what i needed, the final result is :The only problem that may happen is when the
image.getType
isn't a type that supports alpha in comparison with the code of the question, resulting in a smallerint[] ret
, but one can simply convert the image type with :尝试
在哪里 bi - BufferendImage
Try
where bi - BufferendImage