我正在尝试将文本文件转换为图像。我试图读取文件并将字符的ASCII值转换为RGB值。但结果图像只是一个空白图像。谁能帮我这个?这是我的代码的一部分。
for(int i=0;i<=img.getHeight();i++)
{
while((line=br.readLine())!=null)
for(int j=0;j<line.length();j++)
{
int color=(int)line.charAt(j);
img.setRGB(j,i,color);
}
}
谢谢!
答案 0 :(得分:0)
java color已构建支持
Color.decode(hexString)
答案 1 :(得分:0)
问题是从ASCII文本获得的char
值将在[0 ... 255]范围内(8位值)。 BufferedImage.setRGB(x, y, color)
期望color
为完整的32位ARGB值。因为像素的所有8个高位都是0,所以颜色被解释为完全透明,这就是你看到空白图片的原因。
对于答案的其余部分,我假设您实际上存储了像这样的像素,尽管它并不常见。如果您已显示输入数据,我可以进行验证。
根据您输入的ASCII数据包含的内容(RGB?ARGB?灰色数据?),您需要打包值以表示完整的ARGB值:
灰色:
int gray = line.charAt(j) & 0xff;
int ARGB = 0xff000000 | gray << 16 | gray << 8 | gray;
对于RGB(您需要以三步(j
)的步长递增j += 3
):
int red = line.charAt(j) & 0xff;
int green = line.charAt(j + 1) & 0xff;
int blue = line.charAt(j + 2) & 0xff;
int ARGB = 0xff000000 | red << 16 | green << 8 | blue:
对于ARGB(您需要以四(j
)的步长递增j += 4
):
int alpha = line.charAt(j) & 0xff;
int red = line.charAt(j + 1) & 0xff;
int green = line.charAt(j + 2) & 0xff;
int blue = line.charAt(j + 3) & 0xff;
int ARGB = alpha << 24 | red << 16 | green << 8 | blue: