我需要创建一个以像素为单位的字体大小的字体。如何在Java中将字体调整为像素大小?如何将像素转换为点?
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个像素(请参阅转换对象)。或者你的意思是屏幕分辨率在这里扮演角色,即使我不使用屏幕? –