import java.awt.*;

import java.awt.image.*;

 

class Raster {

    protected int width, height;

    public int pixel[];



    ///////////////////////// Constructors //////////////////////



    /**

     *  This constructor which takes no arguments

     *  allows for future extension.

     */

    public Raster()

    {

    }



    /**

     *  This constructor creates an uninitialized

     *  Raster Object of a given size (w x h).

     */

    public Raster(int w, int h)

    {

        width = w;

        height = h;

        pixel = new int[w*h];

    }



    /**

     *  This constructor creates an Raster initialized

     *  with the contents of an image.

     */

    public Raster(Image img)

    {

        try {

            PixelGrabber grabber = new PixelGrabber(img, 0, 0, -1, -1, true);

            if (grabber.grabPixels()) {

                width = grabber.getWidth();

                height = grabber.getHeight();

                pixel = (int []) grabber.getPixels();

            }

        } catch (InterruptedException e) {

        }

    }



    ////////////////////////// Methods //////////////////////////



    /**

     *  Returns the number of pixels in the Raster

     */

    public int size( ) {

        return pixel.length;

    }

    

    /**

     *  Access instance variables

     */

    public int getWidth() {

        return width;

    }

    

    public int getHeight() {

        return height;

    }

    

    public int [] getPixels() {

        return pixel;

    }



    /**

     *  Fills a Raster with a solid color

     */

    public void fill(Color c) {

        int s = size();

        int rgb = c.getRGB();

        for (int i = 0; i < s; i++)

            pixel[i] = rgb;

    }



    /**

     *  Converts Rasters to Images

     */

    public Image toImage() {

        Toolkit toolkit = Toolkit.getDefaultToolkit();

        Image img = toolkit.createImage(new MemoryImageSource(width, height, pixel, 0, width));

        return img;

    }



    /**

     *  Gets a pixel from a Raster

     */

    public int getPixel(int x, int y) {

        return pixel[y*width+x];

    }



    /**

     *  Gets a color from a Raster

     */

    public Color getColor(int x, int y) {

        return new Color(pixel[y*width+x]);

    }



    /**

     *  Sets a pixel to a given value

     */

    public boolean setPixel(int pix, int x, int y) {

        pixel[y*width+x] = pix;

        return true;

    }



    /**

     *  Sets a pixel to a given color

     */

    public boolean setColor(Color c, int x, int y) {

        pixel[y*width+x] = c.getRGB();

        return true;

    }

}