【问题标题】:What are the various ways of drawing things to a picturebox in VB6 and what are the advantages of each?在 VB6 中将事物绘制到图片框的各种方法是什么,每种方法的优点是什么?
【发布时间】:2012-07-04 07:34:49
【问题描述】:

我知道两种方法:

  1. 使用 .line、.circle 等方法
  2. 使用 bitblt
  3. PaintPicture(没用过;在 google 上找到的)

还有其他的吗?

使用某个系统相对于另一个系统有什么优势? (速度、抗锯齿等)

【问题讨论】:

    标签: vb6 drawing picturebox


    【解决方案1】:

    Line 和 Circle 用于矢量图形。 Line 绘制线条、矩形和正方形。 Circles 绘制椭圆和圆形。您可以控制这些方法是轮廓还是填充、线宽以及前景和背景颜色。

    BitBlt 是一个 Win32 API 调用(不是内置的 VB 功能),它允许您将位图写入设备上下文(PictureBox 具有)。有许多不同的模式允许您将正在绘制的背景的像素与图形的像素进行交互。

    PaintPicture() 方法本质上是一个围绕 BitBlt 的 COM 包装器,位图句柄被替换为 Picture 对象。

    还有PSet,它只是简单的在屏幕上的指定位置画一个点。而且我想您还可以包括 Print,它允许您绘制文本(可能包含图形字体)。

    如果您使用 Win32 API,还有许多其他图形函数可用于绘制其他形状,例如圆弧、多边形和贝塞尔曲线。但是,它们通常比内置的 VB 方法更难使用。

    至于优劣,基本上是:

    • VB 功能与 Win32 API 功能:易用性与功能
    • 矢量图形与位图图形:更灵活,但需要更多编程而不是简单,但使用更多内存。

    【讨论】:

    • 你能评论一下这些各种方法是否可以做抗锯齿吗?我猜不是原生 VB 方法。有速度差异吗?我可以混合和匹配原生 VB 方法和 BitBlt / Win32 API 吗?比如如果VB的Line、Circle等方法比较快,但我也想支持bezier曲线,是不是可以同时使用?
    • 它们都没有原生的抗锯齿功能。您最好的选择是绘制大图并重新采样。
    • @MarkBertenshaw 我最近使用了来自 Win32API 的 SetPixelV,我发现它的性能大大优于 .Pset。你没有提到这个特定的 API 函数,但我想我会提到它非常值得使用。之后您必须使用.Refresh 来更新图片框显示的图像,但最终速度仍然是原来的两倍。
    • @Deanna 当你说“重新采样”时......我尝试使用缩小边界的PictureBox1.Scale(...)-(...),但这并没有为我执行任何 AA。我是否必须为此编写一个自定义函数来平均所有被表示的子像素?我从来没有使用过.Point 或多次调用win32api 的GetPixel,但我只能想象性能会很差,不幸的是这对我来说非常不可行,因为我的显示器必须实时更新.
    • 除了图形的像素大小之外,我不使用任何东西。我创建了一个 10 倍(每个维度)目标尺寸的图像,以大尺寸绘制它,然后重新采样(使用 StretchBlt())到目标图片中。
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2010-09-06
    相关资源
    最近更新 更多