Translate

вівторок, 20 квітня 2010 р.

CMYK у Java


Десь з пів року тому зіткнувся з проблемою конвертації картинки зі  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

2 коментарі:

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

    ВідповістиВидалити
  2. Це був найкращий солюшин з тих що я знайшов
    Варіантів було багато, але з робочих був тільки цей і ще один який використовував нейтів бібліотеки

    ВідповістиВидалити