123456789001 2023-05-18 14:02 采纳率: 0%
浏览 55

Graphics2D绘制文字模糊

Graphics2D生成图片绘制文字,字体尺寸设置过小会导致文字模糊不清,用什么方式可以解决?

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-18 17:34
    关注
    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/721970
    • 你也可以参考下这篇文章:使用Graphics2D生成图片
    • 除此之外, 这篇博客: Graphics2D类基本使用中的 二、Graphics2D类绘图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • Graphics2D类仍然保留Graphics类的绘图方法,同时增加了许多新方法。新方法将几何图形(线段、圆等)作为一个对象来绘制。在java.awt.geom包中声明的一系列类,分别用于创建各种身体图形对象。主要有:
      Line2D线段类,RoundRectangle2D圆角矩形类,Ellipse2D椭圆类,Arc2D圆弧类,QuadCurve2D二次曲线类,CubicCurve2D三次曲线类。

      要用Graphics2D类的新方法画一个图形。先在重画方法paintComponent()或paint()中,把参数对象g强制转换成Graphics2D对象;然后,用上述图形类提供的静态方法Double()创建该图形的对象;最后,以图形对象为参数调用Graphics2D对象的draw()方法绘制这个图形。例如以下代码用Graphics2D的新方法绘制线段和圆角矩形:

      package icu.xslblog;
      
      import org.junit.Test;
      
      import javax.imageio.IIOImage;
      import javax.imageio.ImageIO;
      import javax.imageio.ImageWriteParam;
      import javax.imageio.ImageWriter;
      import javax.imageio.stream.ImageOutputStream;
      import java.awt.*;
      import java.awt.geom.*;
      import java.awt.image.BufferedImage;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.IOException;
      import java.util.Iterator;
      
      /**
       * @ClassName TestGraphics2D
       * @Description: TODO
       * @Author xsl
       * @Date 2020/11/2 14:26
       */
      public class Graphics2DTest {
      
          @Test
          public void test1() throws IOException {
      
              // 获取源图片输入流
              FileInputStream imgFileStream = new FileInputStream("E:\\1.png");
              // 用imageIO读取图片
              Image image = ImageIO.read(imgFileStream);
              // 利用BufferedImage,将图片加载到内存中
              int height = image.getHeight(null);
              int width = image.getWidth(null);
              BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
              // 获取图像对象,来对图片进行处理
              Graphics2D g = bufImg.createGraphics();
              //抗锯齿
              RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
              rh.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
              rh.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
              g.setRenderingHints(rh);
      
              // 画一条线
              g.drawImage(image, 0, 0, width, height, null);
              Stroke s = new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
              g.setStroke(s);
      		//新方法
              Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0);
              g.draw(line);
      		//旧方法
      		//g.drawLine(30,50,300,300);
      		//g.drawLine(300,300,120,0);
      		//g.drawLine(120,0,30,50);
              // 为了保证原质量输出,用ImageWriter输出图片
              Iterator writers = ImageIO.getImageWritersByFormatName("png");
              ImageWriter writer = (ImageWriter) writers.next();
              // 指定输出路径
              File f = new File("E:\\test\\out.png");
              ImageOutputStream outStream = ImageIO.createImageOutputStream(f);
              // 修改ImageWriteParam,原质量输出图片
              ImageWriteParam imageWriteParam = writer.getDefaultWriteParam();
              // 将BufferedImage转换为IIOImage,进而输出图片
              IIOImage iioImage = new IIOImage(bufImg, null, null);
              // 输出
              writer.setOutput(outStream);
              writer.write(null,iioImage,imageWriteParam);
          }
      }
      

      也可以先用java.awt.geom包提供的Shape对象,并用单精度Float坐标或双精度Double坐标创建Shape对象,然后再用draw()方法绘制。例如,以下代码先创建圆弧对象,然后绘制圆弧:

      Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN);
      g2d.draw(arc)//绘制前面创建的图形对象arc
      

      三、Graphics2D的几何图形类

    评论

报告相同问题?

问题事件

  • 创建了问题 5月18日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用