Java 操作系统X上乱七八糟的缓冲区图像字体
出于某种原因,绘制到BuffereImage的字符串与直接绘制到JComponent的字符串看起来有所不同 这里有一个例子。直接绘制顶部字符串,而使用缓冲区绘制底部字符串 这是怎么回事Java 操作系统X上乱七八糟的缓冲区图像字体,java,swing,fonts,rendering,bufferedimage,Java,Swing,Fonts,Rendering,Bufferedimage,出于某种原因,绘制到BuffereImage的字符串与直接绘制到JComponent的字符串看起来有所不同 这里有一个例子。直接绘制顶部字符串,而使用缓冲区绘制底部字符串 这是怎么回事 import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Map; public class Main { static class Canvas extends JCo
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Map;
public class Main {
static class Canvas extends JComponent
{
@Override
public void paintComponent(Graphics g)
{
g.setColor(Color.WHITE);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.BLACK);
g.drawString("OMFG look at this 'S'", 10, 20);
BufferedImage bi = new BufferedImage(150,50,BufferedImage.TYPE_INT_RGB);
Graphics2D imageG = bi.createGraphics();
imageG.setColor(Color.WHITE);
imageG.fillRect(0, 0, 150, 50);
imageG.setColor(Color.BLACK);
imageG.setFont(g.getFont());
imageG.drawString("OMFG look at this 'S'", 10, 10);
g.drawImage(bi, 0, 30, this);
}
}
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setMinimumSize(new Dimension(150, 80));
jf.add(new Canvas());
jf.setVisible(true);
}
}
如果添加imageG.setRenderingHintsGraphics2Dg.getRenderingHints;,会发生什么?在某些系统上,请尝试apple.awt.graphics.UseQuartz,例如。如果手动设置一些渲染提示,会怎么样?例如imageG.setRenderingHintRenderingHints.KEY\u TEXT\u抗锯齿、RenderingHints.VALUE\u TEXT\u抗锯齿启用;imageG.setRenderingHintRenderingHints.KEY\u RENDERING,RenderingHints.VALUE\u RENDER\u QUALITY@s1ice:你能用TextLayout试试吗?因为视网膜似乎意味着150像素的组件实际上是这个大小的两倍,所以你可以通过使用300像素的缓冲区并在组件上缩放到150像素来获得最佳渲染效果。尽管这样做有效,但我不知道这是否真的是正确的解决方案。