如何在Java中将ASCII值转换为RGB值?

时间:2015-02-19 10:34:02

标签: java image

我正在尝试将文本文件转换为图像。我试图读取文件并将字符的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);
        }
    }

谢谢!

2 个答案:

答案 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: