TYPE_INT_ARGB图像未正确显示

时间:2014-01-27 18:46:31

标签: java image

我正在创建一个带有随机像素和中间整数的图像。然而,颜色似乎不正确。

click!

如您所见,颜色不对。这是代码

private void createImage(){
    try{
        String key = "3534";
        BufferedImage thumbnail = new BufferedImage(300, 300,BufferedImage.TYPE_INT_ARGB);
        Graphics graphics = thumbnail.getGraphics();
        graphics.setFont(new Font(null, Font.BOLD, 100));

        randomizePixels(graphics);

        graphics.setColor(new Color(255,255,255,255));
        graphics.drawString(key, thumbnail.getWidth()/2, thumbnail.getHeight()/2);

        ImageIO.write(thumbnail,"jpg",new File("c:\\image1.jpg"));
    }catch (Exception e){
        e.printStackTrace();
    }
}
private void randomizePixels(Graphics graphics){
    Random random = new Random();
    for(int k=0;k<300;k++){
        for(int j=0;j<300;j++){
            graphics.setColor(new Color(random.nextFloat(), random.nextFloat(), random.nextFloat(), random.nextFloat()));
            graphics.fillRect(k,j,1,1);
        }
    }
}

正如你所看到的,我设置了数字的颜色(255,255,255,255),它是白色的,不透明度为100%。

我有什么必须做错的吗?如何让我的号码变成白色?

1 个答案:

答案 0 :(得分:2)

首先,我在运行代码时得到的结果略有不同。点应该是随机颜色,而不是你发布的所有红色。

enter image description here

我不确定你想要完成什么,但我想你想要一个随机的噪音并放置一个带有部分可见文字的叠加层。我首先使用png作为输出格式。我不确定jpg如何处理透明度。 因此,您应首先使用纯色绘制随机像素,然后将其写入文本。 您需要在随机化像素后移动设置颜色,如下所示:

private static void createImage(){
    try{
        String key = "3534";
        BufferedImage thumbnail = new BufferedImage(300, 300,BufferedImage.TYPE_INT_ARGB);
        Graphics graphics = thumbnail.getGraphics();

        randomizePixels(graphics);

        graphics.setColor(new Color(255, 255, 255 ,255));
        graphics.setFont(new Font(null, Font.BOLD, 100));
        graphics.drawString(key, thumbnail.getWidth()/2, thumbnail.getHeight()/2);
        ImageIO.write(thumbnail, "png", new File("image1.png"));
    }catch (Exception e){
        e.printStackTrace();
    }
}
private static void randomizePixels(Graphics graphics){
    Random random = new Random();
    for(int k=0;k<300;k++){
        for(int j=0;j<300;j++){
            graphics.setColor(new Color(random.nextFloat(), random.nextFloat(), random.nextFloat(),1));
            graphics.fillRect(k,j,1,1);
        }
    }
}

之后,文本将获得您想要的颜色/“隐藏”文本

enter image description here enter image description here