如何用javaawt图像绘制矩形中的圆

如何用javaawt图像绘制矩形中的圆,java,octave,producer-consumer,Java,Octave,Producer Consumer,我有一个大小为256 x 256的圆的图像。可以使用函数B(i,j)创建圆。通过使用Java生产者和消费者模型,我如何创建一个Java程序来画圆圈 图中的代码使用的是倍频程代码。这是我创建的Java Swing GUI 我在CreateImage类中创建(或生成)了图像。我在你的问题图片中使用了代码,只是我没有取平方根。比较数字的平方更快 我在JPanel上画(或消费)了这个图像。我不打算详细解释Swing代码。我写下了显示图像所需的内容 代码如下: package com.ggl.test

我有一个大小为256 x 256的圆的图像。可以使用函数B(i,j)创建圆。通过使用Java生产者和消费者模型,我如何创建一个Java程序来画圆圈


图中的代码使用的是倍频程代码。

这是我创建的Java Swing GUI

我在CreateImage类中创建(或生成)了图像。我在你的问题图片中使用了代码,只是我没有取平方根。比较数字的平方更快

我在JPanel上画(或消费)了这个图像。我不打算详细解释Swing代码。我写下了显示图像所需的内容

代码如下:

package com.ggl.testing;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class DrawImage implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new DrawImage());
    }

    @Override
    public void run() {
        Image image = new CreateImage(256, 256, 80).createImage();

        JFrame frame = new JFrame("Image of a circle");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new DrawingPanel(256, 256, image));

        frame.pack();
        frame.setVisible(true);
    }

    public class DrawingPanel extends JPanel {

        private static final long serialVersionUID = 1584647402715684757L;

        private Image image;

        public DrawingPanel(int width, int height, Image image) {
            this.image = image;
            this.setPreferredSize(new Dimension(width, height));
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }

    }

    public class CreateImage {

        private int width;
        private int height;
        private int radius;

        public CreateImage(int width, int height, int radius) {
            this.width = width;
            this.height = height;
            this.radius = radius;
        }

        public Image createImage() {
            int circleRadiusSquared = radius * radius;

            BufferedImage image = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);

            Graphics g = image.getGraphics();

            for (int i = 0; i < width; i++) {
                int idist = i - width / 2;
                for (int j = 0; j < height; j++) {
                    int jdist = j - height / 2;
                    int distSquared = idist * idist + jdist * jdist;
                    if (distSquared < circleRadiusSquared) {
                        g.setColor(Color.WHITE);
                    } else {
                        g.setColor(Color.BLACK);
                    }
                    g.drawLine(i, j, i, j);
                }
            }

            g.dispose();

            return image;
        }
    }

}
package com.ggl.testing;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.image.buffereImage;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类DrawImage实现可运行{
公共静态void main(字符串[]args){
调用器(新的DrawImage());
}
@凌驾
公开募捐{
Image Image=newcreateimage(256,256,80).CreateImage();
JFrame=新的JFrame(“圆的图像”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
添加(新绘图面板(256,256,图像));
frame.pack();
frame.setVisible(true);
}
公共类DrawingPanel扩展了JPanel{
私有静态最终长serialVersionUID=15846447402715684757L;
私有图像;
公共绘图面板(整数宽度、整数高度、图像){
这个图像=图像;
此.setPreferredSize(新尺寸(宽度、高度));
}
@凌驾
受保护组件(图形g){
超级组件(g);
g、 drawImage(图像,0,0,this);
}
}
公共类CreateImage{
私有整数宽度;
私人内部高度;
私有整数半径;
公共CreateImage(整数宽度、整数高度、整数半径){
这个。宽度=宽度;
高度=高度;
这个半径=半径;
}
公共映像createImage(){
int Circleradiusquared=半径*半径;
BuffereImage=新的BuffereImage(宽度、高度、,
BuffereImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
对于(int i=0;i
你想消费什么?我想用java产品和消费者模型画一个圆圈…我在我的问题上贴了一张圆圈图片…实际上我是java新手,这是我第一次学习java的基本测试和计划。到目前为止,这与生产者-消费者无关。好吧,也许我对这一点还不熟悉。你可能应该为这个主题创建一个不同的问题,再次链接图像,展示你的代码,并尝试省略消费者-生产者-措辞。谢谢,我已经编写了一些代码,但它和你不一样dist=Math.pow(((Math.pow((j-128),2))+(Math.pow((i-128,2))),0.5)`@乔:你是在求平方根,但除此之外,你的方程在数学上和我的方程是一样的。将一个数平方等于将一个数乘以它本身。