Как быстро нарисовать читаемый крошечный текст - PullRequest
0 голосов
/ 28 июля 2010

При разработке менеджера флэш-памяти мне нужно иметь возможность просматривать большие объемы данных.Своими глазами и разрешением монитора я могу без особых затруднений читать нарисованные от руки буквы 3х5 на матрице 4х6, но ни один из системных шрифтов TrueType не отрисовывает оптимально при таком размере.Я пытался написать код для рисования форм шрифта за пределами экрана, а затем использовать DrawImage, чтобы скопировать эти изображения на экран, но я не могу получить хорошую производительность.Это для разработки, а не для производства, поэтому производительность не обязательно должна быть абсолютно оптимальной, но я не хочу тратить слишком много времени на ожидание обновления экранов данных.

Что было бы лучшим способомили сделать так, чтобы .net отображал шрифт, идеально подходящий для пикселей, или быстро создать растровое изображение из множества маленьких кусочков?Я использую vb.net, поэтому я не могу просто сгенерировать растровое изображение в виде байтового массива и передать его конструктору растровых изображений, если кто-то не покажет мне, как преобразовать массив в IntPtr.

Ответы [ 5 ]

2 голосов
/ 28 июля 2010

Я бы предложил создать шрифт самостоятельно. Есть несколько хороших редакторов шрифтов:

Font Forge - http://fontforge.sourceforge.net/

FontCreator - http://www.high -logic.com / fontcreator.html

Тип Light - http://cr8.netfirms.com/typelight.html

TTFEdit - http://sourceforge.net/projects/ttfedit/

DoubleType - http://doubletype.org/wiki/index.php/DoubleType

1 голос
/ 29 июля 2010

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

1 голос
/ 28 июля 2010

Я бы нашел существующий шрифт размером 3х5 пикселей и использовал его для рисования текста.Будет ли это работать?http://www.pimpyourfont.com/font-12368-Pixelzim-3x5

0 голосов
/ 30 июля 2010

Спасибо всем, кто ответил. Я слишком усложнял вещи в надежде улучшить отзывчивость, но только ухудшал положение. У меня были отдельные подпрограммы для обработки изменений на экранном элементе и для перерисовки экрана. Для каждого элемента я сохранял объекты, представляющие текущее состояние, состояние, отображаемое на экране, и состояние, отображаемое в фоновом растровом изображении. Когда элемент, который уже был нарисован на экране, изменился, я бы нарисовал измененную версию прямо на экране (используя Control.CreateGraphics), ничего не отменяя. Когда часть экрана была признана недействительной и нуждалась в перерисовке, я обновлял элементы на резервной битовой карте, а затем копировал фоновую битовую карту на экран. Моя цель состояла в том, чтобы избежать копирования всего растрового изображения на экран при каждом изменении элемента. Я ожидал, что перерисовки экрана из-за аннулирования области обычно не будут чередоваться с обновлениями элементов, и что обновление элемента путем рисования на экране будет быстрее, чем рисование в закадровом растровом изображении и копирование этого на экран.

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

0 голосов
/ 28 июля 2010

Я бы использовал редактор шрифтов, чтобы соединить ваши отдельные растровые изображения в растровый шрифт, а затем отобразить ваш текст этим шрифтом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...