1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Java - Error in Terminal Window

Discussion in 'Java' started by cvillejin, Apr 1, 2011.

  1. cvillejin

    cvillejin New Member

    Joined:
    Mar 21, 2011
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    0
    Hi, I get an error in the terminal window AFTER I compile everything, and it gives me an explanation, but I don't know how to fix it. Could someone please help?

    Code:
    import acm.graphics.*;
    import acm.program.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.imageio.*;
    import javax.swing.*;
    
    // -------------------------------------------------------------------------
    /**
     *     
     *  @author  
     *  @version Spring, 2011 CS 1054 Intro to Java
     */
    public class WatermarkImages
        extends StudentTestableGraphicsProgram
    {
        //~ Instance/static variables .............................................
        public static final int APPLICATION_WIDTH = 1024;
        public static final int APPLICATION_HEIGHT = 600;
        public static final int TOLERANCE = 5;
        public static final int RGB_MAX = 255;
        
        GImage pic;
        GImage mark;
        //~ Methods ...............................................................
    
        // ----------------------------------------------------------
        /**
         * 
         */
        public void init()
        {
            addMouseListeners();
            String imgFile = chooseImage();
            pic = new GImage(imgFile);
            imgFile = chooseImage();
            mark = new GImage(imgFile);
    
            GImage marked = watermark(pic,mark);
            add(pic,0,0);
        }
        /**
         * 
         */
        public void run()
        {
            /*# add your statements here */
        }
        
        /**
         * Manipulates an image to show anything non-white and non-black in a watermark image transposed on it
         * 
         * @param img is the original image to be manipulated
         * @param water is the watermark to transpose onto img
         * @return a GImage that is the size of the smallest width and smallest height between the two images,
         *         with a watermark transposed onto the original
         */
        public GImage watermark(GImage img, GImage water)
        {
            int[][] imgArray = img.getPixelArray();
            int[][] waterArray = water.getPixelArray();
            int[][] combine;
            
            int width;
            int height;
            //find the smallest height...
            if(imgArray.length < waterArray.length)
            {
                height = imgArray.length;
            }
            else
            {
                height = waterArray.length;
            }
            //find the smallest width...
            if(imgArray[0].length < waterArray[0].length)
            {
                width = imgArray[0].length;
            }
            else
            {
                width = waterArray[0].length;
            }
            //create new 2D array the size of the smallest dimensions of both images...
            combine = new int[width][height];
            
            //traverse through 2D arrays...
            for(int i = 0; i < height; i++)
            {
                for(int j = 0; j < width; i++)
                {
                    int pixel = imgArray[i][j];
                    int red = GImage.getRed(pixel);
                    int green = GImage.getGreen(pixel);
                    int blue = GImage.getBlue(pixel);
                    
                    int maskPixel = waterArray[i][j];
                    int maskR = GImage.getRed(maskPixel);
                    int maskG = GImage.getGreen(maskPixel);
                    int maskB = GImage.getBlue(maskPixel);
                    
                    int markedPixel;
                    if( (maskR<TOLERANCE && maskG<TOLERANCE && maskB<TOLERANCE)                                   //black
                        || (maskR>(RGB_MAX-TOLERANCE) && maskG>(RGB_MAX-TOLERANCE) &&maskB>(RGB_MAX-TOLERANCE)) ) //or white
                    {
                        markedPixel = pixel;    
                    }
                    else
                    {
                        //transpose watermark shape onto original image...
                        int avg = (maskR + maskG + maskB)/3;
                        int newRed = (red+avg)/2;
                        int newGreen = (green+avg)/2;
                        int newBlue = (blue+avg)/2;
                        markedPixel = GImage.createRGBPixel(newRed,newGreen,newBlue);
                    }
                    combine[i][j] = markedPixel;
                }
            }
            return new GImage(combine);
        }
    
        /**
         * [Author: Kevin Buffardi] Saves a GImage to disk as a png file
         * @param picture A GImage picture that will be converted to png format and saved on disk
         * @param filename The name of the file to save (path optional, default to project folder.  e.g. "output.png")
         */
        public void saveImage(GImage picture, String filename)
        {
            try{
                File name = new File(filename);
                Image img = picture.getImage();
                BufferedImage buff = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);
                Graphics graph = buff.getGraphics();
                graph.drawImage(img, 0, 0, null);
                graph.dispose();
                ImageIO.write(buff,"png",name);
            }
            catch(IOException e){
                System.out.println("Error when writing file: " + e.toString());
            }    
        }
        /**
         * [Author: Kevin Buffardi] Shows a file browser dialog so the user can choose a file.  
         * Only image files *should* be chosen, but this method does not prevent other types of files to be chosen.
         * @return A string representing the path and filename chosen (e.g. "C:\My Documents\image.jpg")
         */
        public String chooseImage() 
        {
            JFileChooser dialog = new JFileChooser();
            int result = dialog.showOpenDialog(this);
            if(result == JFileChooser.APPROVE_OPTION) {
                return dialog.getSelectedFile().getPath();
            }
            else
                return "";
        }
    }
    
    
     
  2. cvillejin

    cvillejin New Member

    Joined:
    Mar 21, 2011
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    0
    the error is:

    java.lang.NegativeArraySizeException:
    In file MediaTools.java on line 329.
    It appears that the code is trying to create an array with a negative
    size. Remember, the array must have a size that is a positive number.

    This error is called a NegativeArraySizeException.

    at acm.util.MediaTools.getPixelArray(MediaTools.java:329)
    at acm.graphics.GImage.getPixelArray(GImage.java:336)
    at WatermarkImages.watermark(WatermarkImages.java:63)
    at WatermarkImages.init(WatermarkImages.java:41)
    at acm.program.Program.start(Program.java:803)
    at acm.program.Program.start(Program.java:1279)
    java.lang.NegativeArraySizeException:
    In file MediaTools.java on line 329.
    It appears that the code is trying to create an array with a negative
    size. Remember, the array must have a size that is a positive number.

    This error is called a NegativeArraySizeException.

    at acm.util.MediaTools.getPixelArray(MediaTools.java:329)
    at acm.graphics.GImage.getPixelArray(GImage.java:336)
    at WatermarkImages.watermark(WatermarkImages.java:62)
    at WatermarkImages.init(WatermarkImages.java:41)
    at acm.program.Program.start(Program.java:803)
    at acm.program.Program.start(Program.java:1279)
     

Share This Page