在Winform图表的背景上绘制而不会过度绘制网格

RomCoo

我想在的背景上绘制图像DataVisualization.Charting.Chart由于该ChartArea.BackImage属性仅接受映像的路径,因此无法将此值设置为运行时映像。

因此,我PrePaint Event将图表的绘制在图表图形上(我删除了部分代码,并将图像替换为蓝色矩形):

private void chart1_PrePaint(object sender, System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs e)
{
    double xMax = e.ChartGraphics.GetPositionFromAxis("ChartArea1", AxisName.X, chart1.ChartAreas[0].AxisX.Maximum);
    double xMin = e.ChartGraphics.GetPositionFromAxis("ChartArea1", AxisName.X, chart1.ChartAreas[0].AxisX.Minimum);
    double yMax = e.ChartGraphics.GetPositionFromAxis("ChartArea1", AxisName.Y, chart1.ChartAreas[0].AxisY.Minimum);
    double yMin = e.ChartGraphics.GetPositionFromAxis("ChartArea1", AxisName.Y, chart1.ChartAreas[0].AxisY.Maximum);

    double width = xMax-xMin;
    double heigth = yMax- yMin;

    RectangleF myRect = new RectangleF((float)xMin,(float)yMin,(float)width,(float)heigth);
    myRect = e.ChartGraphics.GetAbsoluteRectangle(myRect);

    e.ChartGraphics.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), myRect);
}

问题在于,这种方式会覆盖图表的网格(请参见左图)。但是我希望网格可见(见左图)。有任何想法吗?

在此处输入图片说明

塔瓦

由于ChartArea.BackImage属性仅接受图像的路径,因此您不能将此值设置为运行时图像。

实际上,您可以通过使用晦涩的NamedImage类:

// here you can use any image..
Bitmap bmp = ... insert your image creation code!

// create a named image from it
NamedImage ni = new NamedImage("test", bmp);

// add it to the chart's collection of images
chart1.Images.Add(ni);

// now we can use it at any place we seemingly can only use a path:
chart1.BackImage = "test";

同样的技巧也适用DataPoint.BackImage

性能是另一个问题,但是它应该比随时写入磁盘都要好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在div上绘制背景

来自分类Dev

线未在图表上绘制

来自分类Dev

在PictureBox上绘制PdfSharp图表

来自分类Dev

Swift不会绘制图表(XYPieChart)

来自分类Dev

在画布上绘制网格时的网格大小

来自分类Dev

可绘制。绘制不会将图像绘制到屏幕上

来自分类Dev

Highcharts在图表上绘制(并删除)字形

来自分类Dev

在html画布图表上绘制正负区域

来自分类Dev

在iOS中的CorePlot图表上绘制虚线

来自分类Dev

时间未在表格图表上绘制

来自分类Dev

WPF在画布面板背景上绘制彩色的网格线

来自分类Dev

[WPF]如何在画布上绘制网格?

来自分类Dev

在不规则网格上绘制轮廓

来自分类Dev

在1个图形上绘制多个网格

来自分类Dev

在SecondaryAxis上绘制网格线-Matplotlib

来自分类Dev

在不规则网格上绘制轮廓

来自分类Dev

jQuery在元素上绘制网格线

来自分类Dev

在PrimeFaces图表中使用jqPlot插件在图表上绘制线

来自分类Dev

从XAML调用时,FrameworkElement方法不会绘制网格-但从Window_loaded可以绘制网格

来自分类Dev

Python在网格网格中的节点上绘制值

来自分类Dev

在画布上重新绘制透明背景

来自分类Dev

在画布上重新绘制透明背景

来自分类Dev

在HTML 5 Canvas上绘制静态背景

来自分类Dev

在 TextView 背景上绘制条形图

来自分类Dev

圆圈不会在画布上绘制

来自分类Dev

图表:绘制信号方差

来自分类Dev

如何绘制科学图表?

来自分类Dev

绘制图表

来自分类Dev

在Winform组件C#上绘制2D矩阵