【问题标题】:Is there a way to edit the opacity of a font?有没有办法编辑字体的不透明度?
【发布时间】:2020-09-27 00:42:10
【问题描述】:

我已经看到很多改变 jpanel 和图像不透明度的东西,但无论我看起来多么努力,我都找不到任何东西来改变字体的不透明度,只有字体。如果可能,最好不要导入库。

只是普通的字体代码:

   Font font = new Font("SansSerif", Font.BOLD, 15);

   setFont(font);

【问题讨论】:

  • 当您绘制文本时,您使用颜色/绘画 - 绘画支持透明度
  • 您能否提供代码以便我们可以看到您实际绘制该字符串的位置?您使用的是什么技术(swing paint 与 javafx 略有不同,与 android 不同)?
  • 我正在使用摇摆,但我想我已经想出了如何通过编辑颜色来做到这一点,就像你在第一条评论中所说的那样,非常感谢您的帮助
  • 换一种说法,Java 必须将文本(矢量格式)渲染到屏幕上(光栅格式)。该过程称为rasterization

标签: java eclipse fonts opacity


【解决方案1】:

在 Swing 中,您应该扩展 LabelUI 以实现标签不透明度。 试试这个

    class OpacityLabelUI extends BasicLabelUI {

        private int alpha = 0x55;

        public void setAlpha(int alpha) {
            this.alpha = alpha;
        }

        @Override
        protected void paintEnabledText(JLabel l, Graphics g, String s, int textX, int textY) {
            int mnemIndex = l.getDisplayedMnemonicIndex();
            g.setColor(applyAlpha(l.getForeground()));
            SwingUtilities2.drawStringUnderlineCharAt(l, g, s, mnemIndex, textX, textY);
        }

        private Color applyAlpha(Color color) {
            color = new Color((color.getRGB() & 0xffffff) | (alpha << 24), true);
            return color;
        }
    }

然后

label.setUI(new OpacityLabelUI());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2019-07-07
    • 2011-01-28
    • 1970-01-01
    • 2021-03-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多