Я пытаюсь реализовать функцию, которая показывает максимально возможное количество пикселей, которое умещается в области.
Пример 1 : представьте светодиодный дисплей размером: 100x20 пикселей. Строка, которую нужно показать: volutpa commodo diam
После того, как я все сделал вручную, я смог определить, что максимально возможный размер пикселя символов без разделения / разделения слов: 8x8 пикселей Каждый символ должен иметь одинаковый размер пикселя.
Приведенная выше строка будет успешно отображаться на светодиодном дисплее, если размер символа составляет 8x8 пикселей. Ожидаемый результат: 8
Пример 2 : представьте светодиодный дисплей размером: 100x20 пикселей. Требуемая строка: dia volutpa diam
Приведенная выше строка будет успешно отображаться на светодиодном дисплее, если размер символа составляет 9x9 пикселей. Ожидаемый результат: 9
Пример 3 : представьте светодиодный дисплей размером: 55x25 пикселей. Строка, которая должна быть показана: dio tuo diam
Строка выше будет успешно отображена на светодиодном дисплее, если размер символа составляет 8x8 пикселей. Ожидаемый результат: 8
Пример 4 : представьте светодиодный дисплей размером: 20x6 пикселей. Строка, которая должна быть показана: tuo volutpa
Строка выше будет успешно отображена на светодиодном дисплее, если размер пикселя символа составляет 2x2 px. Ожидаемый результат: 2
Примечание. Каждый символ в строке (включая пробел) должен иметь одинаковый размер пикселя (например, 6x6 пикселей), чтобы заполнить всю область (светодиодный дисплей) и слова в строке нельзя разбивать / делить.
В этом примере 1 вы можете увидеть «сделанное вручную» изображение того, чего я пытаюсь достичь. Весь макет представляет размер области (100x20 пикселей), в то время как черные квадраты представляют максимально возможный размер символа (8x8 пикселей). Если я использую (9x9 px или больше) для размера символа, текст не поместится, и если я использую (7x7 px или меньше), будет слишком много пустого пространства.
В этом пример 2 вы можете увидеть "сделанное вручную" изображение того, чего я пытаюсь достичь. Весь макет представляет размер области (100x20 пикселей), в то время как черные квадраты представляют максимально возможный размер символа (9x9 пикселей). Если я использую (10x10 px или больше) для размера символа, текст не поместится, и если я использую (8x8 px или меньше), будет слишком много пустого пространства. Мы должны игнорировать пробел в конце слова, если строка подходит к концу.
Ожидается :
Строка 1: dio_volutpa
Строка 2: диаметр
Фактический :
Строка 1: dio_volutpa_
Строка 2: диаметр
В этом пример 3 вы можете увидеть "сделанное вручную" изображение того, чего я пытаюсь достичь. Весь макет представляет размер области (55x25 пикселей), в то время как черные квадраты представляют максимально возможный размер символа (8x8 пикселей). Если я использую (9x9 px или больше) для размера символа, текст не поместится, и если я использую (7x7 px или меньше), будет слишком много пустого пространства. Красные прямоугольники показывают, что для следующего слова нет места, поэтому ему нужно go для новой строки ИЛИ уменьшить размер в пикселях, если ниже строки нет пробела.
Что будет лучший способ реализовать это в C#?
static void Main(string[] args)
{
String sentence = "volutpa commodo diam";
int width = 100; // 100 px
int height = 20; // 20 px
int pixelSize = height / 2; // Starting pixel size (10)
int maxLines = height / pixelSize; // Max. available lines in the area
int currentLine = 1; // Starting line
string[] words = sentence.Split(' '); // Splitting words from the sentence. words[1] = volutpa, words[2] = commodo, words[3] = diam
// Length of the words
for (int i = 0; i < words.Length; i++)
{
Console.WriteLine("Word " + i + " length: " + words[i].Length * pixelSize);
}
Console.ReadLine();
}
Я сделал это сейчас, но не могу понять, как продолжить. Буду признателен за некоторые советы и идеи.