首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi 6:原生Delphi可以像Flash一样流畅地显示图形吗?

Delphi 6:原生Delphi可以像Flash一样流畅地显示图形吗?
EN

Stack Overflow用户
提问于 2010-10-10 10:33:17
回答 2查看 1.5K关注 0票数 5

我有一个本地的Delphi,它模仿了Roy Tanck的Cumulus Tag Cloud查看器,这是一个WordPress TFrame插件。该插件所做的是创建一个3D单词球体,它在“虚拟”球体的表面上旋转。你可以在这里看到它的实际效果:

http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/

在我的应用程序结构中,每个单词都有自己的TBitmap,为了呈现球体,我将所有单词的位图打印到一个临时TBitmap,然后将这个临时TBitmap ()输出到一个可见TPaintBox的画布上。渲染操作发生在每50毫秒发生一次的TTimer计时器事件上。

然而,无论我怎么努力,单词的移动都会有明显的“抖动”,特别是与Flash播放器柔滑流畅的移动相比。我认为增加帧速率可能会有所帮助,我甚至尝试使用多媒体计时器,由于MM计时器的多线程特性,该计时器每10毫秒更新一次,对所有画布进行适当的锁定和解锁。还是很紧张。我能想到的唯一一件事是,我所做的计算导致每个单词呈现时的离散像素位置,这会导致抖动。相反,这是假设,也许Flash可能会抖动来促进“像素之间”的渲染,或者可能会实时抗锯齿,这就是为什么它不会抖动?

在任何情况下,有没有可能使用本地Delphi代码获得我正在寻找的柔滑的运动?或者,唯一的方法是一直使用Direct3D或OpenGL解决方案?如果这是一场失败的战斗,我不想浪费时间去调整这个东西。另一方面,如果你有什么建议,我很乐意听听。我的猜测是,如果我必须走Direct3D/OpenGL路线,那将是一项艰巨的工作和学习曲线,所以如果我能找到一种用原生Delphi代码完成这项工作的方法,我会很高兴的。

后续编辑:打印到一个更大的“虚拟”位图,然后使用这里给出的重采样方法,是否有助于将“向下”打印到实际可见的画布?:

Scale an image nicely in Delphi?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-30 08:46:39

我已经用Delphi写了很多游戏。这当然是可行的。有很多东西需要注意。

您不仅需要定期触发事件,还需要检查事件到达的时间,并根据轮询时间移动,而不是根据预期的等待时间假设时间。

如果需要不依赖图形处理器的亚像素精度,我会推荐Antigrain Geometry或它的Pascal表亲AGGPAS for Delphi。

动画字体可能有一个额外的问题,即字体呈现通常包含确保在像素边界上出现细笔画的逻辑。移动以这种方式呈现的文本可能会更改外观,因为不同的笔划可能会从一个像素对齐到下一个像素。

如果字体呈现为像素对齐,那么量化呈现为整数可能会管理得更好。它仍然会与像素对齐,但通过一次移动一个像素,应该可以使它每次都保持一致。

票数 2
EN

Stack Overflow用户

发布于 2010-10-10 21:05:40

我认为正确的方法是Direct3D (或者OpenGL,但考虑到Delphi只有Windows,也许Direct3D更好)。它的引入正是因为GDI不擅长这样的任务。Flash既支持矢量图形,又支持光栅图形,因此可以比旧的普通GDI更好地处理这类应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3898771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档