如何将二维随机数据数组转换为位图?我正在做的是使用菱形方形算法创建一个高度图 - 它工作正常 - 但我希望能够将结果可视化以用于测试和调试目的。我认为最好的方法是将结果生成为灰度位图。
我已经看过许多读取和写入位图数据的例子(即将图像读取到字节缓冲区并再次返回),但没有任何解释如何获取随机数据并使用它创建图像。我想要做的就是获取我的数组的每个值并将其转换为灰度像素。
例如:
data[0][0] = 98, then pixel (0,0) would be RGB (98,98,98)
data[0][1] = 220, then pixel (0,1) would be RGB (220,220,220)
我的随机值已经在0到255之间(包括0和255)。
答案 0 :(得分:3)
这是一种相对快速的方法。您必须将数据展平为1-D数组,这是width * height的3倍,才能使用此方法。我使用在每个位置填充Math.random()
的2D数据阵列进行了测试
int width = data.length;
int height = data[0].length;
int[] flattenedData = new int[width*height*3];
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int ind = 0;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
greyShade = data[i][j];
flattenedData[ind + j*3] = greyShade;
flattenedData[ind + j*3+1] = greyShade;
flattenedData[ind + j*3+2] = greyShade;
}
ind += height*3;
}
img.getRaster().setPixels(0, 0, 100, 100, flattenedData);
JLabel jLabel = new JLabel(new ImageIcon(img));
JPanel jPanel = new JPanel();
jPanel.add(jLabel);
JFrame r = new JFrame();
r.add(jPanel);
r.show();
答案 1 :(得分:1)
有几个API可以处理您可能想要查看的图像,包括至少一个属于标准扩展库(javax.imageio)的图像。
或者,如果您想手动滚动它,BMP文件格式并不复杂,文档为easy to find,示例代码为readily available。
答案 2 :(得分:1)
使用BufferedImage.setRGB(x, y, rgb),其中rgb是int,你可以使用像Color(data[x][y],data[x][y],data[x][y]).getRGB()这样的Color类。当您结束填充像素时,只需使用ImageIO.write(bufferedImage, "bmp", file)保存。