Java - 将图像作为 byte[] 显示在屏幕上
Java - Put an image as a byte[] on the screen
我需要以最简单的方式在屏幕上放置一个 byte[] 形式的图像缓冲区,其中字节 0-3 是 RGBA 在这种情况下使用 RGB,因此一个像素的字节 0-2,依此类推。我不知道该怎么做,我能找到的唯一信息是从文件加载图像——这完全不是我想要每秒执行 60 次的事情!
那么,我该怎么做呢?
编辑:添加一些非常需要的背景。
我正在创建我自己的 2D 图形库,这似乎是多余的,但我这样做是因为我觉得 Graphics2D API 不适合某些应用程序(并且不容易扩展到我能做到的程度)告诉),尤其是我正在为其编写此库的游戏项目。
这个库的基本元素是我的 Canvas class,它作为我的 Drawable 对象将被渲染到的东西。它根据使用的变体将其数据存储在 RGB、RGBA 或单色格式的字节数组中。我选择这种方法是因为我相信它允许一些更快的渲染操作。 (每个 Drawable 必须有一个方法,它接受一个 Canvas 并将对象渲染到它上面,这个过程可以包括直接写入缓冲区。)
我想在游戏中做的是将那些完成的 Canvas 帧放到 JFrame 或类似的东西上。
如果您不需要 alpha 通道,您可以使用 setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
。
喜欢:
BufferedImage myImage = new BufferedImage(...);
myImage.setRGB(...); //insert here your byte array
PS 您必须先从数组中删除并删除 alpha 字节
像这样:
for(int i = 0, j = 0; i++; i < RGBA.length){
if(((i + 1) % 4) == 0) continue;
//if((i % 4) == 3) continue; //this would also work
RGB[j] = RGBA[i];
j++;
}
我需要以最简单的方式在屏幕上放置一个 byte[] 形式的图像缓冲区,其中字节 0-3 是 RGBA 在这种情况下使用 RGB,因此一个像素的字节 0-2,依此类推。我不知道该怎么做,我能找到的唯一信息是从文件加载图像——这完全不是我想要每秒执行 60 次的事情!
那么,我该怎么做呢?
编辑:添加一些非常需要的背景。
我正在创建我自己的 2D 图形库,这似乎是多余的,但我这样做是因为我觉得 Graphics2D API 不适合某些应用程序(并且不容易扩展到我能做到的程度)告诉),尤其是我正在为其编写此库的游戏项目。
这个库的基本元素是我的 Canvas class,它作为我的 Drawable 对象将被渲染到的东西。它根据使用的变体将其数据存储在 RGB、RGBA 或单色格式的字节数组中。我选择这种方法是因为我相信它允许一些更快的渲染操作。 (每个 Drawable 必须有一个方法,它接受一个 Canvas 并将对象渲染到它上面,这个过程可以包括直接写入缓冲区。)
我想在游戏中做的是将那些完成的 Canvas 帧放到 JFrame 或类似的东西上。
如果您不需要 alpha 通道,您可以使用 setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
。
喜欢:
BufferedImage myImage = new BufferedImage(...);
myImage.setRGB(...); //insert here your byte array
PS 您必须先从数组中删除并删除 alpha 字节
像这样:
for(int i = 0, j = 0; i++; i < RGBA.length){
if(((i + 1) % 4) == 0) continue;
//if((i % 4) == 3) continue; //this would also work
RGB[j] = RGBA[i];
j++;
}