在图表控制上添加图片

问题描述:

我不确定我是否正确地标题,所以如果我解释我正在尝试做什么会更好。我想在图表控件上添加一些图像,并在其周围绘制图形。在图表控制上添加图片

我想在坐标定义的坐标平面上显示传感器的布局,同时注意地理对象(森林,河流等)的位置。这些对象将是我想添加到图表中的图像/

我该怎么做?有可能的?

+0

我们需要更多的信息来正确地回答你的问题。例如,您使用什么来绘制图表,您尝试了哪些代码等等。 :) 请参阅http://stackoverflow.com/help/how-to-ask – JonasMH

+0

我在我的问题中添加了一些信息 –

+0

图表不是像Panel或Form这样的容器控件。不过,您可以使用Controls.Add()方法添加图片框,它们将显示在图表的顶部。然而,有一个鸡与鸡蛋的问题,你不知道他们的位置属性需要,直到图表自己绘制后。这里要做的事情就是为PostPaint事件编写一个事件处理函数,并通过它的e.ChartGraphics属性绘制任何你需要的东西。包括图像,使用DrawImage()。 –

如果您向我们展示一个示例,我们可能会帮助您找到最佳方式。

有几个选项:

    喜欢上了 Chart PictureBoxPanel
  • 您可以将图像控件将它们添加到图表的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]) - 还请注意,您必须而不是DisposeImages否则他们将消失!

下使通过降低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,所以它们会很好地移动,当图表被调整大小时!您也可以通过设置WidthHeight来缩放图像;这是有点棘手,因为它也将在百分之(和作为文档虚假状态在像素)。你可能会想遍历所有的ImageAnnotations并在Resize事件重新调节..:ia.Height = ia.Width * chart1.Width/chart1.Height;

还要注意,还有其他的方法来定位注释,像固定到的数据点,但是这似乎是最好的一个静态装饰。

enter image description here