首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

silverlight 怎么利用坐标点进行高效的绘图显示

2012-05-01 
silverlight 如何利用坐标点进行高效的绘图显示?通过数据库得到一系列的坐标点(x,y),数据量很大,可能有上

silverlight 如何利用坐标点进行高效的绘图显示?
通过数据库得到一系列的坐标点(x,y),数据量很大,可能有上万条或者更多数据。

请问在silverlight下用什么方式可以把这些点都绘制出来并且效率是最高的。


我知道可以生成一系列的控件对象来完成绘制,不过上万个对象似乎太庞大了,会卡死吧。




[解决办法]
可在服务器实现缓存策略,如访问相同的数据,之前生成过了,就不再生成,直接返回之前的图像即可
[解决办法]

C# code
WriteableBitmap wb = new WriteableBitmap(100, 100);                        for (int i = 0; i < 100; i++)            {                for (int j = 0; j < 100; j++)                {                    if (j >= 0 && j < 10)                        SetPixel(wb, i, j, 255, 255, 0, 255);                    else if (j >= 10 && j < 20)                        SetPixel(wb, i, j, 255, 0, 255, 255);                    else if (j >= 20 && j < 30)                        SetPixel(wb, i, j, 255, 255, 255, 0);                    else if (j >= 30 && j < 40)                        SetPixel(wb, i, j, 255, 0, 0, 255);                    else if (j >= 40 && j < 50)                        SetPixel(wb, i, j, 255, 0, 255, 0);                    else if (j >= 50 && j < 60)                        SetPixel(wb, i, j, 255, 255, 0, 0);                    else if (j >= 60 && j < 70)                        SetPixel(wb, i, j, 255, 128, 0, 255);                    else if (j >= 70 && j < 80)                        SetPixel(wb, i, j, 255, 0, 255, 128);                    else if (j >= 80 && j < 90)                        SetPixel(wb, i, j, 255, 255, 128, 0);                    else                        SetPixel(wb, i, j, 255, 255, 128,128);                }            }            img = new Image();            img.Source = wb;            img.HorizontalAlignment = HorizontalAlignment.Left;            this.LayoutRoot.Children.Add(img);        void SetPixel(WriteableBitmap bm, int row, int col, byte alpha, byte r, byte g, byte b)        {            int idx = row * bm.PixelWidth + col;            byte r1 = (byte)(r * (alpha / 255d));            byte g1 = (byte)(g * (alpha / 255d));            byte b1 = (byte)(b * (alpha / 255d));            bm.Pixels[idx] = (alpha << 24) | (r1 << 16) | (g1 << 8) | b1;        } 

热点排行