Hi folks,

a long while ago (2001) Thomas Kübler posted a source to this list ([email protected]) to convert rgb images to cmyk with icc profiles: http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-dev/ 200111.mbox/[EMAIL PROTECTED]

(becuse this is more a jai question i post it to jai list, too)

I tryed to change all cmyk to rgb and all rgb to cmyk to do the other- way-round. But i faild with an java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java: 437) at com.sun.media.jai.opimage.ColorConvertOpImage.computeRectNonColorSpaceJA I(ColorConvertOpImage.java:369) at com.sun.media.jai.opimage.ColorConvertOpImage.computeRect (ColorConvertOpImage.java:289) at javax.media.jai.PointOpImage.computeTile (PointOpImage.java:919) at com.sun.media.jai.util.SunTileScheduler.scheduleTile (SunTileScheduler.java:912)
        at javax.media.jai.OpImage.getTile(OpImage.java:1139)
        at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2356)
        at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2292)
        at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2296)
        at nextgen.cmyk2rgb_ICC.main(cmyk2rgb_ICC.java:81)

can someont tell me how to do the trick cmyk2rgb?? I need it because i have to display cmyk images in a renderd png, but png output of fop can not handle cmyk, so i need to transfer them into rgb.


Thank you in advanced,
ven


PS my code so far:

/*
* cmyk_handles.java
*
* Created on January 13, 2007, 11:20 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package nextgen;

import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.color.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.media.jai.*;

/**
*
* @author kriswolff
*/
public class cmyk2rgb_ICC {

    private static boolean invert = false;
    private static String cmykdatei = "/tmp/myimage.jpg";

    /** Creates a new instance of cmyk_handles */
    public cmyk2rgb_ICC() {
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int[] bitsRGB = {8,8,8};

String cmykProfile = "/Library/Application Support/Adobe/ Color/Profiles/Photoshop4DefaultCMYK.icc"; // icc-profile cmyk String rgbProfile = "/Library/Application Support/Adobe/ Color/Profiles/Recommended/AppleRGB.icc";// icc-profile rgb

        // Dateiname f?r die Ausgabe
        StringTokenizer st = new StringTokenizer(cmykdatei,".");
        StringBuffer buffer = new StringBuffer();
        while ( st.hasMoreTokens() ) {
            buffer.append(st.nextToken());
            buffer.append("_rgb");
            buffer.append(".jpg");
            break;
        }

        try {

            RenderedImage inputCMYK = JAI.create("fileload",cmykdatei);

            // Create a RGB Color Space from rgbProfile
ICC_Profile p = ICC_Profile.getInstance(new FileInputStream(rgbProfile));
            ColorSpace csRGB = new ICC_ColorSpace(p);


ColorModel colorModelRGB = new ComponentColorModel (csRGB,bitsRGB,false,false,Transparency.OPAQUE,DataBuffer.TYPE_BYTE);

            ImageLayout rgbLayout = new ImageLayout();
            rgbLayout.setColorModel(colorModelRGB);
RenderingHints hints = new RenderingHints (JAI.KEY_IMAGE_LAYOUT,rgbLayout);

rgbLayout.setSampleModel (colorModelRGB.createCompatibleSampleModel(inputCMYK.getWidth (),inputCMYK.getHeight()));

java.awt.image.renderable.ParameterBlock pb = new java.awt.image.renderable.ParameterBlock();
            pb.addSource(inputCMYK);
            pb.add(colorModelRGB);
// convert the image from rgb-colorspace to cmyk- colorspace with icc
            PlanarImage out = JAI.create("ColorConvert",pb,hints);

// Damit photoshop die Bilddaten nicht invertiert anzeigt erfolgt
            // eine invertierung der Daten
//            pb = new java.awt.image.renderable.ParameterBlock();
//            pb.addSource(out);
//            PlanarImage out2 = JAI.create("invert",pb);

            WritableRaster rgbRaster = out.copyData();
            // ?ffnen des Output-Streams
OutputStream datei = new FileOutputStream(buffer.toString ());

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder (datei); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam (rgbRaster,JPEGEncodeParam.COLOR_ID_RGB);
            param.setQuality(1, false);
            encoder.encode(rgbRaster, param);
            datei.close();
            System.out.println("Bild erfolgreich gespeichert");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}








Reply via email to