为何新生成的BufferedImage无法在JPanel上绘制显示?
问题解决:BufferedImage无法在JPanel显示的原因
你的代码存在参数顺序错误,导致图像像素未被正确写入,因此无法正常显示。
错误点分析
在initImg方法的嵌套循环中,img.setRGB(i, j, rnd.nextInt(16777216))的参数顺序搞反了:
BufferedImage.setRGB(int x, int y, int rgb)的第一个参数是水平方向坐标(对应图像宽度,列),第二个是垂直方向坐标(对应图像高度,行)- 你的循环里,
i遍历图像高度(行,y轴),j遍历图像宽度(列,x轴),所以参数顺序应该调整为setRGB(j, i, ...)
修正后的代码
public class panelsa extends JPanel{ BufferedImage img; public panelsa(){ setPreferredSize(new Dimension(400,400)); initImg(); } private void initImg() { Random rnd = new Random(); img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB); for (int i = 0; i < img.getHeight(); i++){ for (int j = 0; j < img.getWidth(); j++){ // 修正参数顺序:j对应x坐标,i对应y坐标 img.setRGB(j, i, rnd.nextInt(16777216)); } } } @Override protected void paintComponent(Graphics aG){ super.paintComponent(aG); aG.drawImage(img, 0, 0, null); } }
额外优化提示
你生成的随机值rnd.nextInt(16777216)仅覆盖RGB的24位,而图像类型是TYPE_INT_ARGB(32位含Alpha通道),所以生成的像素Alpha值为0(完全透明),可能导致图像显示全透明。如果需要不透明的随机颜色,可以修改为:
// 生成不透明随机色,将Alpha通道设为0xFF(完全不透明) img.setRGB(j, i, 0xFF000000 | rnd.nextInt(16777216));
内容的提问来源于stack exchange,提问作者King Bipo
相关产品推荐
相关产品推荐

