代码之家  ›  专栏  ›  技术社区  ›  Marek Jedliński

Delphi2009中纯图形显示的选项

  •  2
  • Marek Jedliński  · 技术社区  · 14 年前

    我直接使用图形的全部经验包括,多年前在386台机器上使用Turbo-Pascals-gdi单元绘制图形,发现它的速度慢得令人无法忍受,而且从不考虑它。换句话说,我几乎不知道从哪里开始。

    对于一个简单的互联网广播播放器应用程序,我想设计一个类似于Winamp的图形显示器(但是要大一点,眼睛更容易看,因为这种显示器的模糊性是我试图自己做的一个原因)。

    当然,像那些模仿LED显示屏的简单图形组件还远远不够。我不希望绘制可点击的用户界面控件,当然也不希望只使用文本、数字和一些符号来对读数进行皮肤处理。我知道Delphi2010支持Direct2D,但我只有D2009。

    我有什么选择?是否有任何第三方组件可以提供帮助?

    编辑时 两个小点。我需要的绘图是无闪烁(即,不同于我多年前在涡轮帕斯卡经历:-)。TCanvas的速度够快吗?另外,我可能想使用alphablending,我认为我无法使用基本的TextOut、LineTo等图形API。(我只是不知道有什么可能)。GDI+怎么样?

    4 回复  |  直到 14 年前
        1
  •  3
  •   mjn anonym    14 年前

    一个用于Delphi的fast 2D图形库作为开源在Sourceforge上提供:

    Graphics32 (主页: http://www.graphics32.org/ )

    Graphics32是用于 Delphi和Kylix/CLX。为优化 32位像素格式,提供快速 使用像素和图形的操作 原语。在大多数情况下,图形32 显著优于标准 TBitmap/TCanvas方法。

    Graphics32的一些功能包括:

    • 与标准TBitmap相比,每像素访问速度快100倍;
    • 高性能位图α混合(包括每像素α混合);
    • 具有亚像素精度的像素、直线和多边形抗锯齿(结合alpha混合);
    • 任意多边形变换和自定义填充;
    • 使用高质量重建过滤器(如Lanczos、Cubic、Mitchell)重新采样位图;
    • 独特的最先进的光栅化系统;
    • 位图的仿射变换:亚像素精度的旋转、缩放等;
    • 位图的任意投影变换;
    • 位图的任意重映射变换(例如用于扭曲、变形);
    • 最大采样质量的柔性超采样实现;
    • 无闪烁图像显示组件与优化双缓冲通过先进的基于微瓷砖的重绘优化器;
    • 多个可定制的易于使用的覆盖层;
    • 安全多线程的位图锁定;
    • 用于RGB和alpha通道加载的属性编辑器;
    • 标准图片支持的图像格式的设计时加载;
    • Borland Delphi、C++Builder和Kylix(支持Kylix的最后版本是1.83.)。

    从1.5.1b版起,Graphics32根据Mozilla公共许可的条款获得许可。

        2
  •  1
  •   Mason Wheeler    14 年前

    看一看 TCanvas . 它内置于大多数可视化控件中,包含了一些简单的方法,可以用来绘制您正在查看的那种简单的绘图,而无需使用DirectX或OpenGL。如果你想要一个真正简单的表面,你可以画,放置一个空白 提马吉 TPaintBox并将其画布用作绘图表面。

        3
  •  0
  •   Despatcher    14 年前

    我基本上同意梅森和他的评论。TPaintBox是一个非常简单的组件。您实现OnPaint事件并处于完全控制中。它在一台足够快的机器上足够快。

    把它放到一个TScrollBox上,你甚至不需要担心用户已经滚动到了哪里:)

    一定要检查一下 DoubleBufferred 父控件(面板/滚动框)的属性。

    如果是复杂的图纸/图形,也可以查看 InvalidateRect -这控制画布的哪个区域被重绘。

    当然,就像所有的图形/绘图一样,它很快变得相当复杂:(

        4
  •  0
  •   Mason Wheeler    14 年前

    刚刚看到你的编辑。如果需要alpha混合和无闪烁绘图,tcavas可能不适合您。您应该看看包装OpenGL或Direct3D并为您提供高性能图形画布的组件。

    一个这样的包裹是 Asphyre ,不过我不确定他们是否有一个可以在Delphi2009+上运行的版本。我还有一个定制的库 SDL 1.3 并提供了一个可以放置在Delphi窗体上的绘图框架组件。它确实在Delphi2009及以后的版本上工作,但我还没有将其作为自己的包发布。你可以在我的游戏引擎的SVN档案中找到它,但是如果你能等一两天,我可以试着把它做成一个易于使用的BPL组件包,并可以下载。