⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exporttoimg.java

📁 用JAVA编写的绘图程序 功能简介: 支持存储
💻 JAVA
字号:
package drawsmart.itsv.image;

import java.io.File;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Color;
import javax.imageio.ImageIO;
import java.awt.Font;
import java.text.AttributedString;
import java.awt.font.TextAttribute;
import drawsmart.itsv.FrameSwing;
import java.awt.FontMetrics;
import java.awt.Shape;
import java.awt.BasicStroke;


/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class ExportToImg {

  private BufferedImage bi = null;
  //private int width = 0;
  //private int height = 0;
  private Graphics2D g2d = null;
  private File imgFile;
  private String extStr = "jpg";
  private FrameSwing mainFrame=null;

  /**
   * 初始构造器
   * @param width
   * @param height
   * @param file
   * @param ext
   */
  public ExportToImg(int width, int height, File file, String ext,FrameSwing mainFrame) {
    this.mainFrame =mainFrame;
    bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    g2d = bi.createGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                         RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setColor(Color.WHITE);
    g2d.fillRect(0, 0, width, height);
    this.imgFile = file;
    this.extStr = ext;
  }

  /**
   *
   * @param width
   * @param height
   * @param fileUrl
   * @param ext
   */
  public ExportToImg(int width, int height, String fileUrl, String ext,FrameSwing mainFrame) {
    this(width, height, new File(fileUrl), ext,mainFrame);
  }

  public ExportToImg(int width, int height, String fileUrl) {
    this(width, height, new File(fileUrl));
  }

  public ExportToImg(int width, int height, File file) {
    this(width, height, file, "jpg",null);
  }


  /**
   * 画图带文字
   * @param shape Shape
   * @param labelStr String
   * @param font Font
   */
  public void draw(Shape shape,
                       String labelStr, Font font,int frameWidth) {
    draw(shape, Color.BLACK, Color.WHITE, labelStr,
             font,frameWidth);
  }
  /**
   * 画图带文字
   * @param shape Shape
   * @param labelStr String
   * @param font Font
   */
  public void draw(Shape shape,
                       Color borderColor, Color fillColor,int frameWidth) {
    draw(shape, borderColor, fillColor, "",new Font("Dialog", 14, 14),frameWidth);
  }

  /**
   * 画图带颜色带文字
   * @param startX
   * @param startY
   * @param width
   * @param height
   * @param borderColor
   * @param fillColor
   */
  public void draw(Shape shape,
                       Color borderColor, Color fillColor,String labelStr,
                       Font font,int frameWidth) {
    g2d.setColor(borderColor);
    //System.out.println(width);

    //设置组件的边框宽度
    float f=((BasicStroke)g2d.getStroke()).getLineWidth();
    BasicStroke s = new BasicStroke(frameWidth);
    g2d.setStroke(s);

    g2d.draw(shape);
    g2d.setColor(fillColor);
    g2d.fill(shape);

    s = new BasicStroke(f);
    g2d.setStroke(s);
    //绘制字体
    //获得绘制字体的起点
    float startX=(float)shape.getBounds().getX();
    float startY=(float)shape.getBounds().getY();
    float width=(float)shape.getBounds().getWidth();
    float height=(float)shape.getBounds().getHeight();
    float strStartX = (float) width / 2;
    float strStartY = (float) height / 2;
    strStartX += startX;
    strStartY += startY;


    FontMetrics metrics=mainFrame.getFontMetrics(font);
    if(!labelStr.trim().equals(""))
    {
      byte[] bytyLength = labelStr.getBytes();

      //System.out.println(bytyLength.length);
      int labelLength = metrics.bytesWidth(bytyLength, 0, bytyLength.length - 1);

      //System.out.println(labelLength);
      strStartX = (width - labelLength) / 2 + startX; //再减字符窜长度的一半,使其居中
      if (width <= labelLength && labelStr.length() > 2) {
        if (labelLength != width) {
          int leng = (int) ( (labelLength - width) / 6);
          labelStr = labelStr.substring(0, labelStr.length() - leng - 1) +
              "...";
        }
        else {
          labelStr = labelStr.substring(0, labelStr.length() - 1) + "...";
        }
        bytyLength = labelStr.getBytes();
        labelLength = metrics.bytesWidth(bytyLength, 0, bytyLength.length - 1);
        strStartX = (width - labelLength) / 2 + startX; //再减字符窜长度的一半,使其居中
      }

      drawString(labelStr, font, strStartX, strStartY);
    }
  }

  /**
   * 绘制字体
   * @param drawStr
   * @param font
   */
    public void drawString(String drawStr, Font font, float startX, float startY) {
     drawString( drawStr,  font,  startX,  startY,Color.BLACK);
    }
  public void drawString(String drawStr, Font font, float startX, float startY,Color color) {
    g2d.setColor(color);
    AttributedString attrStr = new AttributedString(drawStr);
    attrStr.addAttribute(TextAttribute.FONT,font);
    g2d.drawString(attrStr.getIterator(), startX, startY);

    // g2d.drawString();
  }

  /**
   * 画线
   * @param startX1
   * @param startY1
   * @param startX2
   * @param startY2
   * @param borderColor
   */
  public void drawLine(int startX1, int startY1, int startX2, int startY2,
                       Color borderColorm,int lineWidth) {
    //设置组件的边框宽度
    float f=((BasicStroke)g2d.getStroke()).getLineWidth();
    BasicStroke s = new BasicStroke(lineWidth);
    g2d.setStroke(s);

    g2d.setColor(Color.BLACK);
    g2d.drawLine(startX1, startY1, startX2, startY2);

    s = new BasicStroke(f);
    g2d.setStroke(s);
  }

  public void drawLine(int startX, int startY, int width, int height,int lineWidth) {
    drawLine(startX, startY, width, height, Color.BLACK,lineWidth);
  }

  /**
   * 保存到文件中
   * @return
   */
  public boolean close() {
    boolean bl = true;
    try {
      //释放画图资源
      g2d.dispose();
      //保存到文件中
      ImageIO.write(bi, this.extStr, this.imgFile);
    }
    catch (Exception e) {
      System.out.println("close imageFile Err:" + e);
      bl = false;
    }
    return bl;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -