代码之家  ›  专栏  ›  技术社区  ›  supercat

如何快速绘制可读的小文本

  •  0
  • supercat  · 技术社区  · 14 年前

    在开发基于闪存的内存管理器时,我需要能够查看大量数据。用我的眼睛和显示器的分辨率,我可以在4x6矩阵上读取手绘的3x5个字母而不会有太大的困难,但是没有一种系统TrueType字体能够以这种尺寸呈现最佳效果。我曾尝试编写代码,将字体形状绘制到屏幕外的位图,然后使用DrawImage将这些位图复制到屏幕上,但无法获得良好的性能。这是为了开发,不是为了生产,所以性能不必绝对最优,但我不想花太长时间等待数据屏幕刷新。

    5 回复  |  直到 14 年前
        2
  •  1
  •   Ned Batchelder    14 年前

    我会找到一个现有的3x5像素字体,并用它来绘制文本。这样行吗? http://www.pimpyourfont.com/font-12368-Pixelzim-3x5

        3
  •  1
  •   Dour High Arch    14 年前
        4
  •  0
  •   Jerry Coffin    14 年前

    我会用一个字体编辑器把你的各个位图放到一个位图字体中,然后用那个字体显示你的文本。

        5
  •  0
  •   supercat    14 年前

    感谢那些回答我问题的人。为了提高反应能力,我把事情搞得太复杂了,但这只会让事情变得更糟。我有单独的例程来处理对屏幕项目的更改和处理屏幕重画。对于每个项目,我都保留了表示当前状态、屏幕上绘制的状态和背景位图中绘制的状态的对象。当屏幕上已经绘制的项目发生更改时,我会将更改的版本直接绘制到屏幕上(使用Control.CreateGraphics),而不会使任何内容无效。当屏幕的一部分无效并且需要重新绘制时,我会更新背景位图上的项目,然后将背景位图复制到屏幕上。我的目标是避免每次项目更改时都将整个背景位图复制到屏幕上。我的期望是,由于区域无效而导致的屏幕重画通常不会与项目更新交错出现,并且通过绘制到屏幕来更新项目的速度将比绘制到屏幕外位图并将其复制到屏幕上的速度更快。

    当我将项目更改代码绘制到屏幕外位图并使包含该项目的区域无效时,性能有了很大的提高。在将位图复制到屏幕上时,每次绘图操作都会受到很大的惩罚,而在复制到另一个屏幕外位图时,这种惩罚是不存在的。因此,将20个小位图复制到一个大位图中,使屏幕上显示这些小位图的区域无效,然后将整个大位图复制到屏幕(剪裁到无效区域)比简单地将小位图扔到屏幕上要快得多。