Сглаженный текст на прозрачном растровом изображении

Никакая потребность использовать свободное городское население - Sun не поставляет base64 кодер с Java. Можно импортировать его как таковой:

import sun.misc.BASE64Decoder;

И затем используют его как это:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);

, Где encodedBytes или java.lang.String или java.io.InputStream. Просто остерегайтесь этого эти sun.*, классы "официально не поддерживаются" Sun.

РЕДАКТИРОВАНИЕ: , Кто знал, это будет самым спорным ответом, который я когда-либо отправлял бы? Я действительно знаю то солнце.* пакеты не поддерживаются или гарантируются продолжаться существующий, и я действительно знаю о палате общин и использую все это время. Однако плакат попросил класс, чтобы, который был "включен с Sun Java 6", и это было тем, на что я пытался ответить. Я соглашаюсь, что палата общин является лучшим способом пойти в целом.

РЕДАКТИРОВАНИЕ 2: , Поскольку amir75 указывает ниже, Java 6 + поставки с JAXB, который содержит поддерживаемый код для кодирования/декодирования Base64. См. ответ Jeremy Ross ниже.

9
задан Glorfindel 14 April 2019 в 13:48
поделиться

2 ответа

Ваш текст отображается как есть, потому что у вас включен режим субпиксельного сглаживания ClearType (который используется по умолчанию в Vista и более поздних версиях). ClearType, по определению, не может хорошо работать с альфа-каналом, поскольку он смешивает цвета и, следовательно, не зависит от фона. Таким образом, он игнорирует альфа-канал и смешивается с черным (в противном случае это ваш прозрачный цвет). Вам необходимо включить простое сглаживание в оттенках серого для желаемого эффекта:

g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
16
ответ дан 4 December 2019 в 11:07
поделиться

Я не уверен, действительно ли это необходимо, но если вы хотите выполнить альфа-смешивание, вы должны указать 32-битное изображение:

Bitmap bitmap = new Bitmap(this.Width, this.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

Используя ваш пример, я смог сделайте текст более привлекательным, добавив подсказку по отображению текста:

g.Clear(Color.Empty);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.DrawString("hello world", new Font(this.Font.FontFamily, 24), Brushes.Blue, new Point(50, 50));

Это делает то, что вы хотите, или просто скрывает проблему?

3
ответ дан 4 December 2019 в 11:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: