【java/graphics2d】在笛卡尔坐标系绘制图片示例

先上图:

再上代码:

复制代码
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;

public class PictureMaker2 {
    public static void main(String[] args) throws Exception{
        final int W=1000;
        final int H=800;
        BufferedImage img=new BufferedImage(W,H,BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d=(Graphics2D)img.getGraphics();
        
        // 进行坐标变换
        AffineTransform trans = new AffineTransform();
        trans.translate(0,H-50);
        trans.rotate(getRad(180.0),0,0);
        trans.scale(-1,1);        
        g2d.setTransform(trans);
        
        // 填充矩形
        g2d.setColor(Color.BLUE);
        g2d.fillRect(0, -50, W, H);
        
        // 绘直线
        int x1=200,y1=500;
        g2d.setColor(Color.white);
        g2d.setStroke(new BasicStroke(2.0f));
        g2d.drawLine(0, 0, x1, y1);
        // 绘文字
        g2d.setFont(new Font("宋体",Font.BOLD,36));
        putString(g2d,"测试文字1",x1,y1);
        
        
        // 绘直线
        int x2=400,y2=300;
        g2d.setColor(Color.red);
        g2d.setStroke(new BasicStroke(2.0f));
        g2d.drawLine(0, 0, x2, y2);
        // 绘文字
        g2d.setFont(new Font("宋体",Font.BOLD,24));
        putString(g2d,"测试文字2",x2,y2);
        
        // 绘直线
        int x3=800,y3=200;
        g2d.setColor(Color.yellow);
        g2d.setStroke(new BasicStroke(2.0f));
        g2d.drawLine(0, 0, x3, y3);
        // 绘文字
        g2d.setFont(new Font("宋体",Font.BOLD,12));
        putString(g2d,"测试文字3",x3,y3);
                
        g2d.dispose();// g2d使命完成
        ImageIO.write(img, "PNG", new FileOutputStream("c:\\hy\\2.PNG"));
        System.out.println("图片做成");
    }
    
    // 传入度数,返回弧度
    private static double getRad(double degree) {
        return degree*3.1415927/180.0f;
    }
    
    private static void putString(Graphics2D g2d,String text,int x,int y) {
        AffineTransform previousTrans = g2d.getTransform();
        
        AffineTransform newtrans = new AffineTransform();

        FontMetrics fm2=g2d.getFontMetrics();
        int textWidth=fm2.stringWidth(text);
        
        
        newtrans.translate(x-textWidth/2, (800-50)-y);
        
        g2d.setTransform(newtrans);
        g2d.drawString(text,0,0);
        
        g2d.setTransform(previousTrans);
    }

}
复制代码

接下来将其类化,再绘制直方图。

END

posted @   逆火狂飙  阅读(409)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-01-31 【高中数学/指数函数、幂函数】寻找曲线y=2^x与y=x^2的三个交汇点
2020-01-31 对韩峰著《SQL优化最佳实践》P7 案例的质疑
2020-01-31 执行Python程序出现“SyntaxError: Non-UTF-8 code starting with '\xb6'...”错误怎么办?
2020-01-31 2020年1月31日 安装Python的BeautifulSoap库记录
2020-01-31 Python 3.8.1 各版本下载地址
2020-01-31 2020年1月31日 安装Python的requests包记录
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示