我不确定我是否正确地提出了这个问题所以如果我解释了我想要做的事情会更好。我想在图表控件上添加一些图像 在他们周围绘制图形。
我想在坐标定义的坐标平面上显示传感器的布局,同时注意地理对象(森林,河流等)的位置。这些对象将是我想要添加到图表/
的图像我该怎么办?有可能吗?
答案 0 :(得分:1)
如果您向我们展示一个例子,我们可以帮助您找到最佳方式。
有几种选择。:
PictureBox
或Panel
等图片控件添加到Chart
,方法是将其添加到图表的Controls
集合中Pre-
或PostPaint
活动BackImage
,其中包含您要在图表周围放置的所有图像。ImageAnnotations
添加到图表中。 (推荐)后者显然是最佳整合的。
以下是一个例子:
我们首先将想要使用的图片添加到图表的Images
集合中:
List<string> imgFiles = new List<string>()
{ yourImageFileName1, ...};
for (int i = 0; i < imgFiles.Count; i++)
{
Image img = Bitmap.FromFile(imgFiles[i]);
chart1.Images.Add(new NamedImage("Image" + i, img));
}
请注意此处使用的NamedImage
类。它允许您通过字符串引用图像;选择更好的名字!也许Path.GetFileNameWithoutExtension(imgFiles[i])
- 另请注意,Dispose
必须不 Images
,否则它们会消失!
接下来,通过减少ChartArea
的尺寸,在图表的右侧创建一个小空间:
ChartArea ca = chart1.ChartAreas[0];
ca.Position = new ElementPosition(5,5,70,90);
请注意,图表ClientSize
的值为百分比,因此在调整Chart
的大小时,它们会增大和缩小!
最后我们可以添加它们。 您会想要在特定位置添加它们。我将它们添加到右侧的一些空间,并使它们可移动:
foreach (NamedImage img in chart1.Images)
{
ImageAnnotation ia = new ImageAnnotation();
ia.Image = img.Name;
ia.AllowMoving = true;
ia.X = 77;
ia.Y = 15 * chart1.Images.IndexOf(img) + 5;
chart1.Annotations.Add(ia);
}
现在您应该看到Annotions
。如果你添加这个事件:
private void chart1_AnnotationPositionChanging(object sender,
AnnotationPositionChangingEventArgs e)
{
testLabel.Text = e.Annotation.X + " " + e.Annotation.Y;
}
..你会看到最佳位置的数字是什么。当然,最终你不会让它们保持可移动性。
请注意Annotations'
位置也位于percentages
,因此当图表调整大小时,它们会很好地移动!您也可以通过设置Width
和Height
来缩放图片。这有点棘手,因为它也会在百分比(和不,因为文档在像素中错误地指出)。您可能希望遍历ImageAnnotations并在Resize
事件中重新调整它们。:ia.Height = ia.Width * chart1.Width / chart1.Height;
另请注意,还有其他方法可以将注释定位到数据点,例如锚定,但这似乎是静态装饰的最佳选择。