Получить правильное графическое представление символов тайской комбинации

Я пытаюсь написать растровый шрифт, который может отображать тайский (среди прочих). У меня есть набор символов, но многие символы являются "комбинирующими символами". Я использую Graphics.DrawString, чтобы получить растровое изображение символов. Это хорошо работало, например, на латыни, кириллице и вьетнамском.

Однако, когда я отображаю выделенный символ объединения, Windows .Net отображает пунктирный круг под символом объединения следующим образом: тайские персонажи

Есть ли способ удалить эти круги? (Они не всегда в одном и том же месте)

Это код, который я использую сейчас:

string face = "Arial";
Font chosenFont = new Font(face, GetFontSize(), fontStyle));
string str = " " + Char.ConvertFromUtf32(c) + " ";
UnsafeBitmap32 bmp = new UnsafeBitmap32(width, height);
Graphics gfx = Graphics.FromImage(bmp.Bitmap);
gfx.FillRectangle(Brushes.Black, 0, 0, width, height);
gfx.DrawString(str, chosenFont, Brushes.White, posX, posY);

1 ответ

Как вы обнаружили в комментариях к вашему вопросу, не имеет смысла визуализировать комбинирующий символ или NSM без хотя бы согласного в текущей ячейке символа.

Следовательно, вы не можете визуализировать эти символы отдельно, так как в шрифте и средстве визуализации шрифта расположение зависит от предыдущих символов.

Вам может повезти, и вы найдете шрифт и средство визуализации шрифтов, которые будут отображать нужные вам символы в сочетании с пробелом; но, как вы обнаружили, некоторые системы будут отображаться с кругом.

Если вы разрабатываете растровый шрифт, просто обрежьте и вставьте область глифа. Если вы пытаетесь отобразить векторный шрифт и автоматически получить глиф, то я сомневаюсь, что вы достигнете чего-либо, кроме хакерского решения, которое не будет работать со всеми шрифтами и средствами визуализации шрифтов.

Другие вопросы по тегам