【发布时间】:2015-02-17 15:45:59
【问题描述】:
我首先要说我已经尝试了很多方法来实现我的目标,现在我正停留在“最佳”解决方案上,但这离我认为的“伟大”解决方案还很远。 .所以我希望在这里得到一个建议。这是在 C# 中使用 Visual Studio 2010。
我的程序播放带有元数据的音频文件,其中可能包括歌词。当我有了歌词时,用户可以选择让歌词一次显示一个短语,或者随着音频滚动。这发生在单行标签上。这不是卡拉 OK 风格,你有整个短语,它会被涂上颜色或其他东西,实际上歌词会随着音乐从左到右滚动。
我尝试过启用和禁用双缓冲。启用它后会更好,但仍然不完美。
1) 在运行时为标签创建一个 Graphics 对象,然后计时器将使用其 Graphics 对象直接绘制到 Label 上。我尝试清除图形,而不是仅绘制图形大小的填充矩形以避免清除闪烁。在其中任何一个之后,都会绘制文本字符串。我在这里尝试了 25ms、50ms 和 100ms,结果大致相同。
2) 在运行时为标签创建一个 Graphics 对象,然后计时器将创建一个标签大小的位图,从该位图创建一个图形对象,绘制填充矩形并在图形对象中绘制字符串,然后将其复制到 Label 的图形对象,我也尝试将位图复制到 Label.Image 字段。
3) 没有创建专用的 Graphics 对象。相反,让计时器使标签无效。然后在Label的Paint事件上,使用e参数的Graphics对象直接绘制填充的矩形,绘制文本字符串。
在所有情况下,结果都是正确滚动的文本,在滚动时会抖动且难以阅读,但在暂停播放时看起来很完美。绘制的时间和内容是准确的。 #3 是我尝试过的众多变体中“最好的”,但正如我所说,阅读文本仍然不容易。鉴于计时器值在 40FPS 和 10FPS 之间变化,并且结果在易读性上并没有太大差异,我认为这归结为我绘制图纸的效率低下。
是我犯了一些明显的错误还是根本缺乏导致这种行为的基础?我很想就如何改进这一点提供一些意见。谢谢。
【问题讨论】:
标签: visual-studio-2010 drawstring c3