将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();
}