我们有一个用 C++ 6 编写的应用程序,它在交通地图上填充空白多边形以显示当前的交通状况。绿色代表好,黄色更拥挤,等等。
“shell maps”是道路的位图,使用矩形和多边形,其中没有填充任何内容。数据从道路传感器(线感应器环路)收集,并根据环路检测器数据填充多边形。
当地图发生变化时,必须有人在paint中手动放大位图,并获取每个新形状内部周围的坐标,这里将填充拥塞颜色。构成地图骨架的多边形都以海军蓝色绘制,在白色背景上。
我做了一个应用程序。当用户单击多边形白色部分内的任何位置时,内部周边的点会显示给用户,并带有放大的缩略图,显示内部许可者已绘制。
在 .Net 中,外围被完美地绘制。
在 C++ 6 应用程序中,一些多边形指向我的应用程序。收集不正确显示。
我查看了 msPaint,.Net 绘制点的方式与 MS Paint 不同。
这是一个简单的例子。代码来自一个带有一个按钮和一个标签的表单。在位图上绘制一条线,位图被“放大”以便您可以看到它,并显示在标签上。
如果您在 Paint 中使用相同的两个点绘制一条线,则绘制的线段与您在 MS Paint 中绘制的线段不同。
private void button1_Click(object sender, EventArgs e)
{
Bitmap bm = new Bitmap(16, 16);
Graphics g = Graphics.FromImage(bm);
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.None;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Default;
Point pt = new Point(1, 3);
Point pt2 = new Point(5, 1);
// If you reverse the points, the same line is drawn.
g.DrawLine(Pens.Orange, pt, pt2);
// label1.Image = bm;
Bitmap bm2 = ZoomMap(8, bm);
g.Dispose();
bm.Dispose();
label1.Image = bm2;
}
private Bitmap ZoomMap(int zoomValue, Bitmap bm)
{
Bitmap zoomedBitMap;
Size sz = bm.Size;// new Size(75, 75);
Size newSize = new Size(sz.Width * zoomValue, sz.Height * zoomValue);
zoomedBitMap = new Bitmap(newSize.Width, newSize.Height);
Graphics gr = Graphics.FromImage(zoomedBitMap);
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
gr.PageUnit = GraphicsUnit.Pixel;
gr.DrawImage(bm, 1, 1, newSize.Width, newSize.Height);
gr.Dispose();
return zoomedBitMap;
}
无论我应用什么设置,都无法在 C# 中模仿 MS Paint,但在 C++ 6 中完美模仿了 MS Paint。
我可以调用任何类型的 Windows API 来在现有位图上绘图吗?
提前感谢您的任何回复。