jugLviv

Meta


Share on:


CMYK у Java

JUG LvivJUG Lviv

Десь з пів року тому зіткнувся з проблемою конвертації картинки зі  CMYK в RGB
Як виявилось задача нетривіальна
Всі конвертери які були в неті конвертували картинку то у неправильні  кольори, то просто у відтінках одного кольору то чорнобілу
От придумав ось такий солюшин  – мож кому пригодиться. При своїй простоті він і найбільш ефективний

public static BufferedImage manualColorConvert(BufferedImage bufferedImage) { 

int w=bufferedImage.getWidth(), h=bufferedImage.getHeight();
//blank canvas
BufferedImage resultVersion = new BufferedImage(w,h , BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = resultVersion.createGraphics();
//white background
g2.setPaint(Color.WHITE);
g2.fillRect(0,0,w,h);
//paint on image
g2.drawImage(bufferedImage, 0, 0,null);
//invert colors
short[] invert = new short[256];
for(int i = 0; i < invert.length; i++) {
invert[i] = (short) (255-i);
}
LookupOp op = new LookupOp(new ShortLookupTable(0,invert),null);
op.filter(resultVersion, resultVersion);
return resultVersion;
}

Ідея прийшла звідси  http://pdf.jpedal.org/java-pdf-blog/bid/11403/Odd-coloured-JPEGs-in-Java-with-ImageIO

JUG Lviv
Author