我正在开发一个绘制手写笔画的应用程序。笔划在内部存储为点向量,它们可以转换为std::vector<Gdiplus::Point>
. 点彼此如此接近,每个点的简单绘制应该会产生连续笔划的图像。
我正在使用Graphics.DrawEllipse
(GDI+) 方法来绘制这些点。这是代码:
// prepare bitmap:
Bitmap *bitmap = new Gdiplus::Bitmap(w, h, PixelFormat32bppRGB);
Graphics graphics(bitmap);
// draw the white background:
SolidBrush myBrush(Color::White);
graphics.FillRectangle(&myBrush, 0, 0, w, h);
Pen blackPen(Color::Black);
blackPen.SetWidth(1.4f);
// draw stroke:
std::vector<Gdiplus::Point> stroke = getStroke();
for (UINT i = 0; i < stroke.size(); ++i)
{
// draw point:
graphics.DrawEllipse(&blackPen, stroke[i].X, stroke[i].Y, 2, 2);
}
最后我只是将它保存bitmap
为PNG图像,有时会出现以下问题:
当我在 stroke 中看到这个“洞”时,我决定再次绘制我的点,但这一次,使用宽度和高度设置为1
的椭圆,使用redPen
宽度设置为0.1f
。因此,在上面的代码之后,我添加了以下代码:
Pen redPen(Color::Red);
redPen.SetWidth(0.1f);
for (UINT i = 0; i < stroke.size(); ++i)
{
// draw point:
graphics.DrawEllipse(&redPen, stroke[i].X, stroke[i].Y, 1, 1);
}
我得到的新斯托克看起来像这样:
当我使用Graphics.DrawRectangle
而不是DrawEllipse
在绘制这个新的红色笔划时,它永远不会发生这种笔划(通过绘制矩形绘制)会有不同的宽度或孔:
我想不出任何可能的原因,为什么画圈会导致这种奇怪的行为。为什么当我使用时,中风总是连续的并且从未以任何方式变形Graphics.DrawRectangle
?谁能解释一下,这是怎么回事?我错过了什么吗?
顺便说一句,我使用的是 Windows XP(例如,如果它是一个已知的错误)。任何帮助将不胜感激。