Java Bild von RGB nach CMY konvertieren

Tron36

Ensign
Registriert
Jan. 2011
Beiträge
209
Hallo Leute,

habe das Problem, dass ich ein gegebenes Bild vom RGB-Farbraum nach CMY-Farbraum konvertieren muss.
Mein problem liegt nicht im Einlesen des jeweiligen Bildes (glaube ich), wahrscheinlich auch nicht im konvertieren (es wird direkt umgerechnet), sondern eher am abspeichern des Bildes als CMY Bild.

Hier das Quellcode, was ich geschrieben habe:
Code:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Aufgabe2c {

    public static void main(String[] args) {
        try {
            BufferedImage image = ImageIO.read(new File("blumen.bmp"));
            iterateThroughImage(image);

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

    }
    public static void iterateThroughImage(BufferedImage image) {
        int w = image.getWidth();
        int h = image.getHeight();
        System.out.println("width, height: " + w + ", " + h);

        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                System.out.println("x,y: " + j + ", " + i);
                int pixel = image.getRGB(j, i);
                getPixelARGB(pixel);
                System.out.println("");
            }
        }
    }

    public static void getPixelARGB(int pixel) {
        int alpha = (pixel >> 24) & 0xff;
        int red = (pixel >> 16) & 0xff;
        int green = (pixel >> 8) & 0xff;
        int blue = (pixel) & 0xff;
        convertRGBToCMY(red, green, blue);
        System.out.println("argb: " + alpha + ", " + red + ", " + green + ", " + blue);
    }

    public static void convertRGBToCMY(int red, int green, int blue) {
        int cyan = 255 - red;
        int magenta =  255 - green;
        int yellow =  255 - blue;

        System.out.println("argb: "+ red + ", " + green + ", " + blue);
    }
}

Ich hoffe Ihr könnt mir weiterhelfen.

Lg Tron36
 
Zuletzt bearbeitet:
Auf den allerersten Blick würde ich sagen, dass du die Methode
convertRGBToCMY() nicht aufrufst...
 
danke für den hinweis. Habs korrigiert. :)

Wie gesagt, das Problem liegt beim beschreiben eines Bildes. (Falls ich etwas nicht übersehen habe)
 
grobe Struktur sollte irgendwie so sein:

lese imageRGB
erstelle imageCYK
für jeden pixelRGB in imageRGB:
pixelCYK = convertRGBToCYK(pixelRGB)
save pixelCYK to imageCYK
 
Bin soweit, dass ich das Bild schreiben kan, aber irgendiwe sieht es nciht richtig aus. Der Code ist Folgender:
Java:
    import java.awt.Color;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
   
    import javax.imageio.ImageIO;
   
    public class Aufgabe2c {
   
        public static void main(String[] args) {
            try {
                BufferedImage image = ImageIO.read(new File("blumen.bmp"));
                iterateThroughImageToGetPixel(image);
               
            } catch (IOException e) {
                e.printStackTrace();
            }
   
        }
        public static void iterateThroughImageToGetPixel(BufferedImage image) {
            try {
                BufferedImage cmyImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
               
                System.out.println("width, height: " + image.getWidth() + ", " + image.getHeight());
               
                for (int column = 0; column < image.getHeight(); column++) {
                    for (int row = 0; row < image.getWidth(); row++) {
                        System.out.println("x,y: " + row + ", " + column);
                        int pixel = image.getRGB(row, column);
    //                    getPixelCMYValuesFromARGBValuesPerPixel(pixel).getRGB();
                        cmyImage.setRGB(row, column, getPixelCMYValuesFromARGBValuesPerPixel(image.getRGB(row, column)).getRGB());              
                       
                        System.out.println("");
                        System.out.println("----------------------------------------------------------------------------");
                    }
                }
                System.out.println("#####################################################");
                ImageIO.write(cmyImage, "bmp", new File("blumen_cmy.bmp") );
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } // Save as BMP
        }
        /*
         * Quelle: https://alvinalexander.com/blog/post/java/getting-rgb-values-for-each-pixel-in-image-using-java-bufferedi
         *         http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_20_006.htm#mj4c12381d5bacf8fb6ee31448d26890bb
         */
        public static Color getPixelCMYValuesFromARGBValuesPerPixel(int pixel) {
            int alpha = (pixel >> 24) & 0xff;
            int red = (pixel >> 16) & 0xff;
            int green = (pixel >> 8) & 0xff;
            int blue = (pixel) & 0xff;

            System.out.println("argb: " + alpha + ", " + red + ", " + green + ", " + blue);
           
            return convertRGBToCMY(red, green, blue);
        }
       
        public static Color convertRGBToCMY(int red, int green, int blue) {
            int[] cmyArray = new int[3];
           
            //cyan
            int cyan = 255 - red;
            //magenta
            int magenta = 255 - green;
            //yellow
            int yellow = 255 - blue;
            return new Color(cyan, magenta, yellow);
        }
    }
Hoffe ihr könnt mir weiterhelfen.
 
Zuletzt bearbeitet:
Zurück
Oben