如何将PNG转为十六进制值数组并在Java Turtle中实现图片显示?
解决Java Turtle图片转颜色值数组的问题
直接用Java自带的BufferedImage类就能搞定,不用绕十六进制的弯路,步骤如下:
加载图片到
BufferedImage对象
用ImageIO.read()方法读取本地图片,注意处理IO异常:import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; // 加载图片 BufferedImage img = null; try { img = ImageIO.read(new File("你的图片路径.jpg")); } catch (IOException e) { e.printStackTrace(); }遍历像素生成颜色数组
BufferedImage的getRGB(x, y)方法直接返回包含alpha通道的int类型颜色值(格式为0xAARRGGBB),直接用这个值创建Color对象即可:import java.awt.Color; int width = img.getWidth(); int height = img.getHeight(); Color[][] colorArray = new Color[width][height]; // 遍历每个像素 for (int x = 0; x < width; x++) { // 注意:图片的y轴是向下的,Turtle的y轴通常向上,倒序遍历避免图片倒置 for (int y = height - 1; y >= 0; y--) { int rgbValue = img.getRGB(x, height - 1 - y); colorArray[x][y] = new Color(rgbValue, true); // true保留透明度通道 } }适配Turtle绘制
拿到colorArray后,用你已掌握的像素显示方法遍历数组即可。比如移动Turtle到对应坐标,设置画笔颜色为colorArray[x][y],再绘制单个像素点。
之前转十六进制的方法失效,大概率是手动转换时没处理好alpha通道,或是字符串转颜色的格式出错,用BufferedImage的原生方法能避开这些问题,直接拿到可靠的颜色值。
内容的提问来源于stack exchange,提问作者VS Puzzler
相关产品推荐
相关产品推荐

