我需要創建一個以像素爲單位的字體大小的字體。如何在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個像素(請參閱轉換對象)。或者你的意思是屏幕分辨率在這裏扮演角色,即使我不使用屏幕? –