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

Я пытаюсь написать растровый шрифт, который может отображать тайский язык (среди прочего). У меня есть набор символов, но многие символы являются кодовыми точками "комбинирования символов". Я использую 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);

person Luc Bloom    schedule 01.02.2016    source источник
comment
Возможно, вам потребуется предоставить некоторый минимальный пример кода. Проблема во многом зависит от типа создаваемого вами приложения и среды выполнения. Кроме того, не забудьте сообщить нам точные версии шрифтов, которые вы используете на компьютере, на котором запущено приложение. Например, Arial Unicode может отличаться в зависимости от того, установлен ли тайский язык. Кроме того, эти круги являются заполнителями согласных. Верхние / нижние гласные или тональные знаки не имеют смысла без согласной. Просмотрите основную информацию о тайском письме.   -  person bytebuster    schedule 01.02.2016
comment
Я знаком с тем, что их нужно комбинировать. Я пытаюсь удалить заполнители согласных, чтобы у меня был чистый символ для объединения. Я начинаю думать, что это невозможно, и что мне придется либо: 1) визуализировать каждую согласную с каждым объединением (NxM) и написать алгоритм замены предварительной комбинации, либо 2) использовать библиотеку, такую ​​как FreeType2, чтобы получить полную поддержку TTF. Думаю, мое время лучше потратить на второе.   -  person Luc Bloom    schedule 02.02.2016
comment
Спасибо за исходный код. Кроме того, правильно ли, что ваш c - это всего лишь один комбинированный символ (например, MaiEk, MaiTo и т. Д.)? Если да, то это недопустимая строка Unicode. Он может что-то отображать, но реализации платформы могут отличаться. Я думаю, есть два хороших решения: (1) для тайского языка: используйте согласный звук KoKai (U+0E01); (2) Международные стандарты: используйте U+25CC ТОЧЕЧНЫЙ КРУГ. Это Статья содержит большое количество плюсов и минусов каждого решения.   -  person bytebuster    schedule 03.02.2016


Ответы (1)


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

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

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

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

person koan    schedule 12.02.2016