从GridData创建Image的代码,没有把LegendScheme独立成另外一个方法,是因为我觉得那样会多次调用和创建一些对象,可能相对会慢一点(没有经过具体测试)
 - /// <summary>
- /// 从Grid创建图像
- /// </summary>
- /// <param name="gdata">GridData</param>
- /// <param name="als">色标</param>
- /// <returns></returns>
- public static Image getImageFromGridData(GridData gdata, LegendScheme als)
- {
- int width,height,breakNum;
- width = gdata.XNum;
- height = gdata.YNum;
- breakNum = als.BreakNum;
- double[] breakValue = new double[breakNum];
- Color[] breakColor = new Color[breakNum];
- for (int i = 0; i < breakNum; i++)
- {
- breakValue = Convert.ToDouble(als.LegendBreaks.EndValue);
- breakColor = als.LegendBreaks.Color;
- }
- Color defaultColor = breakColor[breakNum-1]; //默认颜色为最后一个颜色
- Bitmap aBitmap = new Bitmap(width, height);
- aBitmap.MakeTransparent();
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < width; j++)
- {
- double oneValue = gdata.Data[i, j];
- Color oneColor = defaultColor;
- //循环只到breakNum-1 是因为最后一个LegendBreaks的EndValue和StartValue是一样的
- for (int k = 0; k < breakNum - 1; k++)
- {
- if (oneValue < breakValue[k])
- {
- oneColor = breakColor[k];
- break;
- }
- }
- aBitmap.SetPixel(j, height-i-1, oneColor);
- }
- }
- Image aImage = (Image)aBitmap;
- return aImage;
- }
|