Як виявилось задача нетривіальна
Всі конвертери які були в неті конвертували картинку то у неправильні кольори, то просто у відтінках одного кольору то чорнобілу
От придумав ось такий солюшин - мож кому пригодиться. При своїй простоті він і найбільш ефективний
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
Все правильно, але чому ліби не працювали? Я ніколи не пишу такого роду код, хіба на с++ :). Завжди я фрішна ліба/клас які це роблять...
ВідповістиВидалитиЗІ чому не використати http://www.velocityreviews.com/forums/t127265-rgb-to-cmyk.html замість магічних байтів?
+ http://carback.us/rick/blog/?p=58 в поміч...
Це був найкращий солюшин з тих що я знайшов
ВідповістиВидалитиВаріантів було багато, але з робочих був тільки цей і ще один який використовував нейтів бібліотеки