java graphics dispose_java使用Graphics合成图片时出现变红的问题解决方法

在做合成图片的时候偶尔遇到某些图片原图是这样的

236bba349a80

QQ图片1.jpg

合成后 图片是这样的

236bba349a80

QQ图片.png

表面被涂上了一层红色

网上查阅资料后知道 ImageIO.read(url)方法有问题 读取图片的时候可能会不正确处理ICC ,ICC为JPEG图片格式中的一种头部信息。

解决方案

Image src=Toolkit.getDefaultToolkit().getImage(file.getPath());

BufferedImage image=BufferedImageBuilder.toBufferedImage(src);//Image to BufferedImage

BufferedImageBuilder 源码

public class BufferedImageBuilder{

public static BufferedImage toBufferedImage(Image image) {

if (image instanceof BufferedImage) {

return (BufferedImage) image;

}

// This code ensures that all the pixels in the image are loaded

image = new ImageIcon(image).getImage();

BufferedImage bimage = null;

GraphicsEnvironment ge = GraphicsEnvironment

.getLocalGraphicsEnvironment();

try {

int transparency = Transparency.OPAQUE;

GraphicsDevice gs = ge.getDefaultScreenDevice();

GraphicsConfiguration gc = gs.getDefaultConfiguration();

bimage = gc.createCompatibleImage(image.getWidth(null),

image.getHeight(null), transparency);

} catch (HeadlessException e) {

// The system does not have a screen

}

if (bimage == null) {

// Create a buffered image using the default color model

int type = BufferedImage.TYPE_INT_RGB;

bimage = new BufferedImage(image.getWidth(null),

image.getHeight(null), type);

}

// Copy image to buffered image

Graphics g = bimage.createGraphics();

// Paint the image onto the buffered image

g.drawImage(image, 0, 0, null);

g.dispose();

return bimage;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值