在图表控制上添加图片
我不确定我是否正确地标题,所以如果我解释我正在尝试做什么会更好。我想在图表控件上添加一些图像,并在其周围绘制图形。在图表控制上添加图片
我想在坐标定义的坐标平面上显示传感器的布局,同时注意地理对象(森林,河流等)的位置。这些对象将是我想添加到图表中的图像/
我该怎么做?有可能的?
如果您向我们展示一个示例,我们可能会帮助您找到最佳方式。
有几个选项:
-
喜欢上了
- 您可以将图像控件将它们添加到图表的
Controls
收集 - 您可以在
Pre-
或PostPaint
事件 吸引他们
- 您可以组装一个
BackImage
,其中包含要在图表周围放置的所有图像。 - 您可以将
ImageAnnotations
添加到图表中。 (推荐)
Chart
PictureBox
或
Panel
后者显然是最好的整合。
下面是一个例子:
我们开始通过增加我们要使用图表的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;
还要注意,还有其他的方法来定位注释,像固定到的数据点,但是这似乎是最好的一个静态装饰。
我们需要更多的信息来正确地回答你的问题。例如,您使用什么来绘制图表,您尝试了哪些代码等等。 :) 请参阅http://stackoverflow.com/help/how-to-ask – JonasMH
我在我的问题中添加了一些信息 –
图表不是像Panel或Form这样的容器控件。不过,您可以使用Controls.Add()方法添加图片框,它们将显示在图表的顶部。然而,有一个鸡与鸡蛋的问题,你不知道他们的位置属性需要,直到图表自己绘制后。这里要做的事情就是为PostPaint事件编写一个事件处理函数,并通过它的e.ChartGraphics属性绘制任何你需要的东西。包括图像,使用DrawImage()。 –