如果我在字符串向量中有一个图像作为十六进制值 - 并且想要在JPanel中重现图像 - 在覆盖方法paintComponent(Graphics g)中循环是什么样的?我猜一个嵌套循环应该适合逐行向下绘制面板。但我怎么可能知道每行有多少字节?答案只是图像的尺寸吗?例如 - 如果图像的尺寸为1000 * 910 - 我在x方向上迭代1000次,在y方向上迭代910次?完全失败 - 正如你在图像中看到的那样:
图像 格式.jpg
尺寸:100 * 910
@Override
public void paintComponent(Graphics g) {
for (int x = 0; x < 1000; x++) {
for (int y = 0; y < 910; y++) {
int red = Integer.parseInt(bytesInHex[y], 16);
int green = Integer.parseInt(bytesInHex[y + 1], 16);
int blue = Integer.parseInt(bytesInHex[y + 2], 16);
g.setColor(new Color(red, green, blue));
g.drawLine(x, y, x, y);
}
}
}
我知道代码可能是错误的 - 但更好地展示我的糟糕尝试而不是显示任何内容。我在流的下面给出了一个片段(十六进制转换为int)
根据图像 - 我认为3个连续值占据屏幕上的一个像素。没有透明度所以我们有红色,绿色,蓝色。我只是在g.setcolor中放入3个succisive字节(整数)(new Color(r,g,b)),然后画一条线(点)。
显然这里完全没错 - 我在运行这个应用程序时看到的只是白色和黑色的条纹。
所以 - 显然我的方法是完全错误的 - 任何人都可以提供som提示和提示,也许告诉我什么是错的?
感谢
答案 0 :(得分:0)
首先,您需要知道数据的方向,但假设其原始颜色数据x和y,您需要进行适当的迭代和引用:
for (int y=0; y<height; y++) {
for (int x=0; x<width; x+=3) {
int pixelIndex = y*width + x;
Color col = new Color(Integer.parseInt(bytesInHex[pixelIndex], 16)
Integer.parseInt(bytesInHex[pixelIndex + 1], 16),
Integer.parseInt(bytesInHex[pixelIndex + 2], 16));
//draw pixel
}
}