1
/**
 * The purpose of this program is to make an image and turn it into a kaleidoscope
 *
 * @author (Danny Meijo)
 * @version (07/27/2017)
 */
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;

public class KaleidoscopeImage
{
    private Picture canvas = null;
    private Picture canvas2 = null;
    private Picture pictureObj = null;
    private Picture scaledPicture = null;
    private Picture clippedPicture = null;
    private Graphics g = null;
    private Graphics g2 = null;
    private Graphics gV2 = null;
    private Graphics g2V2 = null;
    private Graphics gV3 = null;
    private Graphics g2V3 = null;


    KaleidoscopeImage(Picture Canvas, Picture image, Picture Canvas2)
    {
        canvas = Canvas;
        canvas2 = Canvas2;
        pictureObj = image;
        g = canvas.getGraphics();
        g2 = (Graphics2D)g;
    }
    public Picture firstPanel()
    {
        g2.drawImage(pictureObj.getImage(), 0, canvas.getHeight() / 2, null);


        Pixel bottomLeftPixel = null;
        Pixel topRightPixel = null;
        Color sourceColor1 = null;


        for(int ty = 0, by = canvas.getHeight(); ty < canvas.getHeight() / 2; ty++, by--)
        {
            for(int lx = 0, rx = canvas.getWidth(); lx < canvas.getWidth() / 2; lx++, rx--)
            {
                bottomLeftPixel = canvas.getPixel(lx, by - 1);
                sourceColor1 = bottomLeftPixel.getColor();
                topRightPixel = canvas.getPixel(rx - 1, ty);
                topRightPixel.setColor(sourceColor1);
            }
        }


        Pixel sourcePixel = null;
        Pixel targetPixel = null;
        Color sourceColor2 = null;
        Color targetColor = null;


        for(int y = 0; y < canvas.getHeight() / 2; y++)
        {
            for(int lx = 0, rx = canvas.getWidth(); lx < canvas.getWidth() / 2; lx++, rx--)
            {
                sourcePixel = canvas.getPixel(rx - 1,y);
                sourceColor2 = sourcePixel.getColor();
                targetPixel = canvas2.getPixel(lx,y);
                targetPixel.setColor(sourceColor2);
            }
        }

        return canvas2;

    }
    public Picture secondPanel()
    {
        Pixel leftPixel = null;
        Pixel rightPixel = null;
        Color sourceColor = null;


        for(int y = 0; y < canvas2.getHeight() / 2; y++)
        {
            for(int lx = 0, rx = canvas2.getWidth(); lx < canvas2.getWidth() / 2; lx++, rx--)
            {
                leftPixel = canvas2.getPixel(lx,y);
                sourceColor = leftPixel.getColor();
                rightPixel = canvas2.getPixel(rx - 1, y);
                rightPixel.setColor(sourceColor);
            }
        }

        return canvas2;

    }

    public Picture thirdPanel()
    {
        Pixel topPixel = null;
        Pixel bottomPixel = null;
        Color sourceColor = null;

        for(int lx = 0, rx = canvas2.getWidth(); lx < canvas2.getWidth() / 2; lx++, rx--)
        {
            for(int ty = 0, by = canvas2.getHeight(); ty < canvas2.getHeight() / 2; ty++, by--)
            {
                topPixel = canvas2.getPixel(rx - 1, ty);
                sourceColor = topPixel.getColor();
                bottomPixel = canvas2.getPixel(rx - 1, by - 1);
                bottomPixel.setColor(sourceColor);
            }
        }

        return canvas2;

    }


    public Picture fourthPanel()
    {
        Pixel leftPixel = null;
        Pixel rightPixel = null;
        Color sourceColor = null;


        for(int lx = 0, rx = canvas2.getWidth(); lx < canvas2.getWidth() / 2; lx++, rx--)
        {
            for(int ty = 0, by = canvas2.getHeight(); ty < canvas2.getHeight() / 2; ty++, by--)
            {
                leftPixel = canvas2.getPixel(rx - 1, by - 1);
                sourceColor = leftPixel.getColor();
                rightPixel = canvas2.getPixel(lx, by - 1);
                rightPixel.setColor(sourceColor);
            }
        }

        return canvas2;

    }
    public Picture scalePicture(double xFactor, double yFactor)
    {
        AffineTransform scaleTransform = new AffineTransform();
        scaleTransform.scale(xFactor, yFactor);
        scaledPicture = new Picture((int)(canvas2.getWidth() * xFactor), (int)(canvas2.getHeight() * yFactor));
        gV2 = scaledPicture.getGraphics();
        g2V2 = (Graphics2D)gV2;
        g2V2.drawImage(canvas2.getImage(), scaleTransform, null);

        return scaledPicture;

    }


    public Picture clipPicture(Color color)
    {
        Picture canvas3 = new Picture(canvas2.getWidth(), canvas2.getHeight());

        Pixel sourcePixel = null;
        Pixel targetPixel = null;
        Color sourceColor = null;
        Color targetColor = null;

        for(int y = 0; y < canvas2.getHeight(); y++)
        {
            for(int x = 0; x < canvas.getWidth(); x++)
            {
                sourcePixel = canvas2.getPixel(x,y);
                sourceColor = sourcePixel.getColor();
                targetPixel = canvas3.getPixel(x,y);
                targetPixel.setColor(sourceColor);
            }
        }

        gV3 = canvas3.getGraphics();
        g2V3 = (Graphics2D)gV3;


        canvas3.setAllPixelsToAColor(color);
        Ellipse2D.Double clip = new Ellipse2D.Double(0,0, canvas3.getHeight(), canvas3.getWidth());
        g2V3.setClip(clip);
        g2V3.drawImage(canvas2.getImage(), 0, 0, canvas3.getHeight(), canvas3.getWidth(), null);

        return canvas3;

    }
}

Sorry, this is my first post, and I am also very new to java, since I'm learning it over the summer. I was not sure how to cut it to just the parts that I need, but the problem I'm having is in the scalePicture method. I was copying what I saw in a demo program to scale the image down to 0.75x0.75. But, in my program, there is an error with the drawImage method, where as the demo progam had no error.

If you are curious this is the demo that I was copying:

import java.awt.geom.AffineTransform;
import java.awt.Graphics;
import java.awt.Graphics2D;

class ScalingDemo
{
    private Picture originalPicture = null;
    private Picture newPicture = null;
    private Graphics g = null;
    private Graphics2D g2 = null;
    
    ScalingDemo(Picture pic)
    {
        originalPicture = pic;
    }
    
    public Picture scalePicture(double xFactor, double yFactor)
    {
        AffineTransform scaleTransform = new AffineTransform();
        scaleTransform.scale(xFactor, yFactor);
        newPicture = new Picture((int)(originalPicture.getWidth()*xFactor), (int)(originalPicture.getHeight()*yFactor));
        g = newPicture.getGraphics();
        g2 = (Graphics2D)g;
        g2.drawImage(originalPicture.getImage(), scaleTransform, null);
        
        return newPicture;
    }
}
Danny M
  • 21
  • 3

1 Answers1

0

Looks like the error is at line:

g2V2.drawImage(canvas2.getImage(), scaleTransform, null); - there's no such method in java.awt.Graphics interface.

You should use method with another signature: drawImage(Image img, int x, int y, ImageObserver observer) - see here

Ivan Pronin
  • 1,768
  • 16
  • 14
  • I realize thats the error, but I needed to scale the image down to 0.75 x 0.75 of the original. And I was just copying what a demo had, and the demo had no error, except mine does. So I was wondering if there is any way to do it where I can scale down my image as well. – Danny M Jul 28 '17 at 19:14
  • Look here for further info on scaling: https://stackoverflow.com/questions/15558202/how-to-resize-image-in-java – Ivan Pronin Jul 28 '17 at 19:21
  • I was looking at the link you sent in your answer, and I saw that there is an option for scaling, but it is only used for int, is it possible to convert it into a double? – Danny M Jul 28 '17 at 19:24