在开发基于闪存的内存管理器时,我需要能够查看大量数据。凭借我的眼睛和显示器分辨率,我可以在4x6矩阵上阅读手绘3x5字母而不会有太大困难,但系统TrueType字体都没有以该大小呈现最佳状态。我已经尝试编写代码来绘制字体形状到屏幕外的位图,然后使用DrawImage将这些位图复制到屏幕上,但我无法获得良好的性能。这是用于开发,而不是生产,因此性能不一定是绝对最佳的,但我不想花太长时间等待数据屏幕刷新。
最好的方法是.net显示一个像素完美的字体,或者快速构建多个小块的位图?我正在使用vb.net,所以我不能简单地将位图生成为字节数组并将其传递给Bitmap构造函数,除非有人可以告诉我如何将数组转换为IntPtr。
答案 0 :(得分:2)
我建议你自己创建字体。有几个很好的字体编辑器:
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 :(得分:1)
我会找到一个现有的3x5像素字体,并用它来绘制文字。这会有用吗? http://www.pimpyourfont.com/font-12368-Pixelzim-3x5
答案 2 :(得分:1)
要绘制该大小的可读文本,您应该考虑subpixel rendering。看看these examples。
答案 3 :(得分:0)
我会使用字体编辑器将您的各个位图放在一个位图字体中,然后以该字体显示您的文字。
答案 4 :(得分:0)
感谢那些回答的人。为了提高响应能力,我一直在过度复杂化,但只是让事情变得更糟。我有单独的例程来处理对屏幕项目的更改并处理屏幕重绘。对于每个项目,我保留了表示当前状态的对象,屏幕上绘制的状态以及在后备位图中绘制的状态。当已经在屏幕上绘制的项目发生更改时,我会将更改后的版本直接绘制到屏幕上(使用Control.CreateGraphics)而不会使任何内容失效。当屏幕的一部分无效并需要重新绘制时,我会更新支持位图上的项目,然后将支持位图复制到屏幕。我的目标是避免每次项目更改时将整个支持位图复制到屏幕。我的期望是由于区域失效导致的屏幕重绘通常不会穿插项目更新,并且通过绘制到屏幕来更新项目将比绘制到屏幕外位图并将其复制到屏幕更快。
当我将项目更改的代码绘制到屏幕外位图并使包含该项目的区域无效时,性能得到了显着提高。在将位图复制到屏幕时,当复制到另一个屏幕外位图时,似乎存在大量的每次绘图操作损失。因此,将二十个小位图复制成一个大位图,使那些小位图出现的屏幕表示区域无效,然后将整个大位图复制到屏幕(剪切到无效区域)要比简单快得多把小位图扔在屏幕上。