Graphics2D setColor的奇怪颜色行为

时间:2014-12-04 11:57:29

标签: java awt paint graphics2d

我正在拍摄一张图片并在上面画一个矩形,但问题是,对于某些图像,矩形颜色很好,但其他颜色会发生变化。我该如何解决这种行为

这是我的代码

public class Index {
static int[][] coordenadas = new int[1][4];
public static void main(String[] args) throws IOException {

    coordenadas[0][0]=530;
    coordenadas[0][1]=237;
    coordenadas[0][2]=86;
    coordenadas[0][3]=17;
    //File file = new File("C:\\Users\\Juan\\Desktop\\2.jpg");
    File file = new File("C:\\Users\\Juan\\Desktop\\1.jpg");
    paint(file);
}

public static void paint(File file) throws IOException{
    BufferedImage img = ImageIO.read(file);
    Graphics2D g = img.createGraphics();    
    g.setColor(Color.yellow);            
    //g.drawRect(coordenadas[0][0], coordenadas[0][2], coordenadas[0][2], coordenadas[0][3]);           
   g.fillRect(coordenadas[0][0], coordenadas[0][3], coordenadas[0][2], coordenadas[0][3]);



    g.dispose();

    ImageIO.write(img,"jpg", new File("C:\\Users\\Juan\\Desktop\\outcome.jpg"));   
}
}

这是2个不同输出的示例

Worng输出

Worng output

Rigth输出

Rigth output

这些是原始图像的链接

http://imageshack.com/a/img661/1940/bqwmPL.jpg

http://imageshack.com/a/img903/1447/vDwVtf.jpg

提前感谢您的时间和下水道

1 个答案:

答案 0 :(得分:0)

根据@mrKobel的建议,我改变了加载图像的方式,从文件到ImageIcon,以及所有工作。这是新代码。

public class Index {

static int[][] coordenadas = new int[1][4];
static BufferedImage bi ;
public static void main(String[] args) throws IOException {

    coordenadas[0][0]=530;
    coordenadas[0][1]=237;
    coordenadas[0][2]=86;
    coordenadas[0][3]=17;   
    ImageIcon img = new ImageIcon("C:\\Users\\Juan\\Desktop\\2.jpg");       
     BufferedImage image = new BufferedImage(img.getIconWidth(), img.getIconHeight(),  BufferedImage.TYPE_INT_RGB);
     Graphics2D g2d = (Graphics2D)image.getGraphics();
     img.paintIcon(null, g2d, 0, 0);
     Color color = new Color(255,255,0,100);
     g2d.setColor(color);               
     g2d.fillRect(coordenadas[0][0], coordenadas[0][1], coordenadas[0][2], coordenadas[0][3]);      
     ImageIO.write( image,"jpg", new File("C:\\Users\\Juan\\Desktop\\outcome.jpg"));   


}


}