Java Fehler beim bearbeiten eines Bildes

Tron36

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

ich habe einen RGB zu CMY konverter Programmiert. das problem ist, dass ich folgende Fehlermeldung bekomme:
java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!

Kann mir aber die Fehlermeldung nicht erklären.

Die komplette Fehlermeldung Lautet folgendermaßen:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
    at java.desktop/sun.awt.image.IntegerInterleavedRaster.setDataElements(IntegerInterleavedRaster.java:297)
    at java.desktop/java.awt.image.BufferedImage.setRGB(BufferedImage.java:1016)
    at Aufgabe2c.iterateThroughImageToGetPixel(Aufgabe2c.java:32)
    at Aufgabe2c.main(Aufgabe2c.java:14)

Mein Quellcode ist Folgender:

Java:
    import java.awt.Color;
import java.awt.color.ColorSpace;
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 i = 0; i < image.getHeight() - 1; i++) {
                    for (int j = 0; j < image.getWidth() - 1; j++) {
                        System.out.println("x,y: " + j + ", " + i);
                        int pixel = image.getRGB(j, i);
    //                    getPixelCMYValuesFromARGBValuesPerPixel(pixel).getRGB();
                        cmyImage.setRGB(i, j, getPixelCMYValuesFromARGBValuesPerPixel(pixel).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);
        }
    }

Ich hoffe ihr könnt mir weiterhelfen.

Viele Grüße
Tron36
 
Der StackTrace weißt ja auf den setRGB Methodenaufruf in Zeile 32 hin.
Schau dir an, was die Methode als Parameter fordert und mit welchen Werten du sie aufrufst :)
 
Kann es sein das du irgendwelche random Aufgaben ohne Kenntnisse versuchst zu lösen bzw dir aus anderen Codezeilen zusammen klickst? (No offence).
 
  • Gefällt mir
Reaktionen: I'm unknown
1. Wieso machst du einen zweiten Thread auf?
2. Ich kenne mich mit der API nicht aus, aber wieso rechnest du erst nach CMY hin und her und rufst dann aber den Constructor hier auf und definierst dein BufferedImage oben ebenfalls als RGB-Irgendwas?
 

Ähnliche Themen

Zurück
Oben