【发布时间】:2013-07-07 06:07:27
【问题描述】:
我需要以像素为单位创建给定大小的字体。
Java 的Font 类构造函数需要以磅表示的字体大小。点是物理长度,而像素是数字化的。所以我需要dpi。
手册上说,这个值包含在FontRenderContext.getTransform()中。
我发现,就我而言,缩放是一,即像素 = 点。
不幸的是,创建大小为 100 的字体会创建更大的图像。
例如下面的代码
BufferedImage ans = new BufferedImage(width, height, imageType);
Font font = new Font(fontName,fontStyle,height);
Graphics2D g2 = ans.createGraphics();
g2.setFont(font);
FontMetrics fm = g2.getFontMetrics();
FontRenderContext frc = g2.getFontRenderContext();
System.out.println("height=" + height);
System.out.println("frc.getTransform()=" +frc.getTransform());
System.out.println("g2.getTransform()=" +g2.getTransform());
System.out.println("fm.getAscent()+fm.getDescent()="+fm.getAscent()+"+"+fm.getDescent()+"="+(fm.getAscent()+fm.getDescent()));
g2.drawString(str, 0, fm.getAscent());
给予
height=100
frc.getTransform()=AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]
g2.getTransform()=AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]
fm.getAscent()+fm.getDescent()=93+20=113
如何搭配?
【问题讨论】:
-
一英寸有 72 个点。台式电脑显示器一般为 96 像素到英寸。您可以调用 Toolkit.getDefaultToolkit().getScreenResolution();以每英寸像素为单位获取屏幕分辨率。
-
在我的例子中,分辨率是每点 1 个像素(参见变换对象)。或者你的意思是即使我不使用屏幕,屏幕分辨率也会在这里起作用?