java画图

公司有个需求,需要画一个图,这个图只有x轴,不需要y轴

这个集合里面放一些参数,我们用作表示呼吸状态,正常或者不正常,对应的状态为0或1,RespColorMap里面存呼吸状态(键):颜色(值)。例子:

RespColorMap.put(0,0xffffff);

最后返回的是一个字符串,将这个字符串放进页面<img src=... />生成图片

static BASE64Encoder encoder = new sun.misc.BASE64Encoder();

public String drawRespImg(List<Integer> list){
    String base64 = "data:image/png;base64,";
    if (list == null || list.size() == 0) return base64;
    int len = list.size();
    BufferedImage image = new BufferedImage(len, 60, BufferedImage.TYPE_INT_RGB);
    // 获取Graphics2D
    Graphics2D g2d = image.createGraphics();
    // 画图
    g2d.setBackground(new Color(0x444444));

    for (int i = 0; i < len; i++) {
        g2d.setPaint(new Color(RespColorMap.get(list.get(i))));
        RoundRectangle2D rect = new RoundRectangle2D.Double(i, 0, i, 60,
                4, 4);//创建矩形
        g2d.draw(rect);
    }
    g2d.dispose();
    // 保存文件
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        File f1 = new File(UUID.randomUUID().toString());
        ImageIO.write(image, "jpg", baos);
        byte[] bytes = baos.toByteArray();
        base64 += encoder.encodeBuffer(bytes).trim();
        f1.delete();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return base64;
}

### Java绘图API概述 Java 提供了多种绘图 API 来支持开发者创建图形界面和处理图像。其中最常用的工具之一是 **Java 2D API**,它可以用来绘制基本形状、文本、图片以及其他复杂图形。 以下是几个常见的 Java 绘图方法及其示例: --- #### 使用 `Graphics` 和 `Graphics2D` 进行简单绘图 通过继承 `JFrame` 并重写其 `paint()` 方法,可以实现基础的绘图功能。以下是一个完整的例子,展示了如何绘制圆圈和矩形[^2]: ```java import javax.swing.*; import java.awt.*; public class SimpleDrawingExample extends JFrame { public SimpleDrawingExample() { setTitle("Simple Drawing Example"); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; // 设置颜色和线宽 g2d.setColor(Color.RED); g2d.setStroke(new BasicStroke(2)); // 绘制圆形 int xCircle = 100; int yCircle = 100; int diameter = 200; g2d.drawOval(xCircle, yCircle, diameter, diameter); // 绘制矩形 int rectX = 150; int rectY = 150; int rectWidth = 100; int rectHeight = 100; g2d.drawRect(rectX, rectY, rectWidth, rectHeight); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { SimpleDrawingExample example = new SimpleDrawingExample(); example.setVisible(true); }); } } ``` --- #### 创建并保存空白画布为 PNG 文件 如果需要生成一张空白画布并将它保存为 PNG 图像文件,则可以通过 `BufferedImage` 实现这一目标[^1]: ```java import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class CanvasCreator { public static void createCanvas(int width, int height, String filePath) throws Exception { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics graphics = image.getGraphics(); // 填充背景色 graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, width, height); // 可选:在此处添加更多绘图逻辑... // 释放资源 graphics.dispose(); // 将图像保存到指定路径 File output = new File(filePath); ImageIO.write(image, "png", output); } public static void main(String[] args) { try { createCanvas(800, 600, "blank_canvas.png"); System.out.println("Canvas created and saved as blank_canvas.png."); } catch (Exception e) { e.printStackTrace(); } } } ``` --- #### 高级绘图:使用 Aspose.Drawing 添加标注 对于更高级的应用场景,比如在现有图像上叠加文字或几何图案,可以考虑第三方库 **Aspose.Drawing**。该库扩展了标准 Java 的绘图能力,简化了许多复杂的操作流程[^3]。 注意:需先下载并配置好 Aspose.Drawing 库才能运行如下代码片段。 ```java import com.aspose.drawing.Bitmap; import com.aspose.drawing.Font; import com.aspose.drawing.Graphics; import com.aspose.drawing.SolidBrush; import com.aspose.drawing.Color; public class AdvancedImageAnnotation { public static void annotateImage(String inputPath, String outputPath) throws Exception { Bitmap bitmap = new Bitmap(inputPath); Graphics graphics = Graphics.fromImage(bitmap); SolidBrush brush = new SolidBrush(Color.Red); Font font = new Font("Arial", 24); // 在图像左下角添加注释 graphics.DrawString("Sample Annotation!", font, brush, 50, bitmap.getHeight() - 100); // 保存修改后的图像 bitmap.save(outputPath); } public static void main(String[] args) { try { annotateImage("input_image.jpg", "annotated_output.jpg"); System.out.println("Image annotated successfully!"); } catch (Exception e) { e.printStackTrace(); } } } ``` --- #### 关于坐标系的理解 需要注意的是,默认情况下,Java 的绘图坐标系起点位于组件的左上角位置 `(0, 0)`,向右延伸代表 X 轴正方向,向下则表示 Y 轴正方向[^4]。因此,在设计布局或者调整元素相对关系时要特别留意这一点。 --- ### 总结 以上介绍了几种典型的基于 Java 的绘图方式,涵盖了从简单的二维图形渲染到利用外部库完成更加精细的任务范围内的多个方面。每种方案都有各自适用领域,具体选择取决于实际需求和技术栈偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值