【发布时间】:2012-07-04 07:34:49
【问题描述】:
我知道两种方法:
- 使用 .line、.circle 等方法
- 使用 bitblt
- PaintPicture(没用过;在 google 上找到的)
还有其他的吗?
使用某个系统相对于另一个系统有什么优势? (速度、抗锯齿等)
【问题讨论】:
标签: vb6 drawing picturebox
我知道两种方法:
还有其他的吗?
使用某个系统相对于另一个系统有什么优势? (速度、抗锯齿等)
【问题讨论】:
标签: vb6 drawing picturebox
Line 和 Circle 用于矢量图形。 Line 绘制线条、矩形和正方形。 Circles 绘制椭圆和圆形。您可以控制这些方法是轮廓还是填充、线宽以及前景和背景颜色。
BitBlt 是一个 Win32 API 调用(不是内置的 VB 功能),它允许您将位图写入设备上下文(PictureBox 具有)。有许多不同的模式允许您将正在绘制的背景的像素与图形的像素进行交互。
PaintPicture() 方法本质上是一个围绕 BitBlt 的 COM 包装器,位图句柄被替换为 Picture 对象。
还有PSet,它只是简单的在屏幕上的指定位置画一个点。而且我想您还可以包括 Print,它允许您绘制文本(可能包含图形字体)。
如果您使用 Win32 API,还有许多其他图形函数可用于绘制其他形状,例如圆弧、多边形和贝塞尔曲线。但是,它们通常比内置的 VB 方法更难使用。
至于优劣,基本上是:
【讨论】:
SetPixelV,我发现它的性能大大优于 .Pset。你没有提到这个特定的 API 函数,但我想我会提到它非常值得使用。之后您必须使用.Refresh 来更新图片框显示的图像,但最终速度仍然是原来的两倍。
PictureBox1.Scale(...)-(...),但这并没有为我执行任何 AA。我是否必须为此编写一个自定义函数来平均所有被表示的子像素?我从来没有使用过.Point 或多次调用win32api 的GetPixel,但我只能想象性能会很差,不幸的是这对我来说非常不可行,因为我的显示器必须实时更新.
StretchBlt())到目标图片中。