java - 绘制图像错误;没有找到drawImage的方法

标签 java

/**
 * 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;

    }
}

抱歉,这是我的第一篇文章,我对 java 也很陌生,因为我整个夏天都在学习它。我不确定如何将其剪切为我需要的部分,但我遇到的问题是在scalePicture方法中。我正在复制我在演示程序中看到的内容,将图像缩小到 0.75x0.75。但是,在我的程序中,drawImage 方法有一个错误,而演示程序没有错误。

如果您好奇,这是我正在复制的演示:

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;
    }
}

最佳答案

看起来错误在行:

g2V2.drawImage(canvas2.getImage(),scaleTransform, null); - java.awt.Graphics 接口(interface)中没有这样的方法。

您应该使用具有另一个签名的方法: drawImage(Image img, int x, int y, ImageObserverobserver) - 参见here

关于java - 绘制图像错误;没有找到drawImage的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45380387/

相关文章:

java - 将 JSON 对象列表转换为单个 JSON 数组

java - Jhipster 应用程序生成失败

java - 如何应对历史敏感性?

Java自定义Exception错误未报告异常

java - 解析命令行并将其更改为 Char 或 Boolean

java - jackson 1.9.x 使用自定义注释进行反序列化

java - 无法通过 Java VM 选项配置 JNDI 读取和连接超时属性

java - 如何将 JTable 导出到 .csv 文件?

java - Cloud Spanner 的数据流 : java. lang.IllegalArgumentException:Jetty ALPN/NPN 尚未正确配置

java - 无法使用 EWS Java API 发送电子邮件