Java 对大于256x256的图像使用BuffereImage方法getRGB()
基本上,我正在为游戏加载SpriteSheet,但我遇到了一个错误,其中页面不能大于256x256,这显然是大型动画页面的问题 主要问题是,当我通过ImageIO.read()方法将图像加载为BuffereImage,然后使用BuffereImage中的getRGB()方法时,它会输出到int[]。这很好,除非int数组需要大于256x256(因为这是最大整数值) 最后,值将从int[]转换为int[]],因此数组的最终大小不是问题,但BuffereImage.getRGB()仅输出到一维int数组,因此如何使用大于该值的值来实现这一点?这是我的代码摘要 这是当我试图用不同的int[]分析两个不同部分的图像,然后将它们都放入int[]Java 对大于256x256的图像使用BuffereImage方法getRGB(),java,arrays,bufferedimage,Java,Arrays,Bufferedimage,基本上,我正在为游戏加载SpriteSheet,但我遇到了一个错误,其中页面不能大于256x256,这显然是大型动画页面的问题 主要问题是,当我通过ImageIO.read()方法将图像加载为BuffereImage,然后使用BuffereImage中的getRGB()方法时,它会输出到int[]。这很好,除非int数组需要大于256x256(因为这是最大整数值) 最后,值将从int[]转换为int[]],因此数组的最终大小不是问题,但BuffereImage.getRGB()仅输出到一维int
private void load() {
int width = 0, height = 0;
int[] pixelsr = null, pixelsrr = null;
try {
BufferedImage image = ImageIO.read(new FileInputStream(path));
width = image.getWidth();
height = image.getHeight();
pixels = new int[width][height];
if (width >= 256 || height >= 256) {
pixelsr = new int[256 * 256];
image.getRGB(0, 0, w, h, pixelsr, 0, 256);
pixelsrr = new int[(width - 256) * (height - 256)];
image.getRGB(256, 256, width, height, pixelsr, 0, width - 256);
for (int i = 0; i < pixelsr.length; i++) {
for (int ii = 0; ii < 256; ii++) {
for (int iii = 0; iii < 256; iii++) {
pixels[ii][iii] = pixelsr[ii + iii * 256];
}
}
}
for (int i = 0; i < pixelsrr.length; i++) {
for (int ii = 256; ii < width - 256; ii++) {
for (int iii = 256; iii < height - 256; iii++) {
pixels[ii][iii] = pixelsr[ii + iii * (width - 256)];
}
}
}
} else {
pixelsr = new int[width * height];
image.getRGB(0, 0, w, h, pixelsr, 0, width);
for (int i = 0; i < pixelsr.length; i++) {
for (int ii = 0; ii < width; ii++) {
for (int iii = 0; iii < height; iii++) {
pixels[ii][iii] = pixelsr[ii + iii * width];
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
private void load(){
整数宽度=0,高度=0;
int[]pixelsr=null,pixelsr=null;
试一试{
BuffereImage image=ImageIO.read(新文件输入流(路径));
宽度=image.getWidth();
高度=image.getHeight();
像素=新整数[宽度][高度];
如果(宽度>=256 | |高度>=256){
pixelsr=新整数[256*256];
getRGB(0,0,w,h,pixelsr,0,256);
pixelsrr=新整数[(宽度-256)*(高度-256)];
getRGB(256,256,宽度,高度,像素,0,宽度-256);
对于(int i=0;i
我已经在这个问题上纠缠了好几个小时,找不到解决方法,到目前为止还没有看到其他人有这个问题。来自:
返回默认RGB颜色模型中的整数像素数组
(键入_INT_ARGB)和默认的sRGB颜色空间,从
图像数据
w
和h
参数用于指定要检索的区域的大小
使用二维数组,可以将图像的每列存储在不同的一维数组中
我还没有测试过这个,但是类似的东西应该可以工作
for(int i = 0; i < width; i++){
image.getRGB(i, 0, 1, height, pixels[i], 0, stride);
}
for(int i=0;i
首先,256x256不是最大的int值…256x256=65536,而Java的设计是32位或64位。32位无符号整数范围是0..4294967296;因此理论上可以有4GB的图像,并且没有问题。正如@AhmedMasud已经指出的,这个问题的整个前提是不正确的。因此很难说到底是什么这就是问题所在。只需使用getRGB(…)
方法,不要担心图像有多大。:)没有到多维数组的神奇转换,如果您尝试,Java也不会允许。
for(int i = 0; i < width; i++){
image.getRGB(i, 0, 1, height, pixels[i], 0, stride);
}