将cmyk模式的图片转成rgb

Anoth 2012-06-26 11:39:02
在网上找了一天资料,都没有看到一个完整好用的方法,都是些零星的片段。以下是我综合网上找到的几种说法写的代码,icc文件是下载的AdobeICCProfiles里面的。能转,但是转出来图片的白色都变成绿色了,感觉答案就在眼前,就差那么一点点。哪位有这方面的经验,请指教一二,不胜感激。

try {
ColorSpace cs = new ICC_ColorSpace(ICC_Profile.getInstance("JapanColor2001Coated.icc"));
File file = new File("D:\\cmyk.jpg");
FileInputStream input = new FileInputStream(file);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(input);
Raster srcRaster = decoder.decodeAsRaster();

BufferedImage result = new BufferedImage(srcRaster.getWidth(), srcRaster.getHeight(), BufferedImage.TYPE_INT_RGB);
WritableRaster resultRaster = result.getRaster();

ColorConvertOp cmykToRgb = new ColorConvertOp(cs, result.getColorModel().getColorSpace(), null);
cmykToRgb.filter(srcRaster, resultRaster);

for (int x = srcRaster.getMinX(); x < srcRaster.getWidth(); ++x)
for (int y = srcRaster.getMinY(); y < srcRaster.getHeight(); ++y) {

float[] p = srcRaster.getPixel(x, y, (float[])null);

for (int i = 0; i < p.length; ++i){
p[i] = 1 - p[i] / 255f;
}

p = cs.toRGB(p);

for (int i = 0; i < p.length; ++i){

p[i] = p[i] * 255f;
}
resultRaster.setPixel(x, y, p);
}
BufferedImage imageb = new BufferedImage(result.getColorModel(), resultRaster, true, null);
FileOutputStream out = new FileOutputStream("D://rgb.jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(imageb);
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
...全文
265 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anoth 2012-06-28
  • 打赏
  • 举报
回复
都没人回答吗,还是自己解决了

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧