首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 画图有关问题,没几分了,求大神看下

2013-12-20 
C# 画图问题,没几分了,求大神看下。请大神给分析下,代码功能如下,有一个文本,文本内容以00-09为主,每一个数

C# 画图问题,没几分了,求大神看下。
请大神给分析下,代码功能如下,有一个文本,文本内容以00-09为主,每一个数字代表一个颜色,文本是按照图片宽、高写的,比如图片是640*480,那么文本每一行是1280个字符(因为代表颜色的是双位数),一共480行,下面的代码可以画出图来(颜色是乱设定的),现在可以实现画图功能,但是非常慢,求大神给优化下。

private void DrawImage(string s)
        {
            StringBuilder sb = new StringBuilder();
            string[] s1 = s.Replace("\r\n", "|").Split('|');
            int l, w;
            l = l4;
            w = a4;
            Bitmap bmp = new Bitmap(l, w);
            Graphics draw = Graphics.FromImage(bmp);
            draw.Clear(Color.Black);
            Color c = Color.FromArgb(255);
            Pen p = new Pen(c);
            p.Color = Color.FromArgb(255);
            for (int i = 0; i < w; i++)
            {
                for (int a = 0; a < l*2; a++)
                {
                    #region
                    switch (s1[i].Substring(a, 2))
                    {
                        case "00":
                            {
                                p.Color = Color.FromArgb(0, 255, 0);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                        case "02":
                            {
                                p.Color = Color.FromArgb(255, 255, 0);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                        case "03":
                            {
                                p.Color = Color.FromArgb(0, 255, 255);
                                draw.DrawRectangle(p, a/2, i, 1, 1);


                                a++;
                                break;
                            }
                        case "04":
                            {
                                p.Color = Color.FromArgb(0, 0, 0);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                        case "05":
                            {
                                p.Color = Color.FromArgb(255, 255, 255);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                        case "06":
                            {
                                p.Color = Color.FromArgb(0, 0, 255);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                        case "07":
                            {
                                p.Color = Color.FromArgb(100, 100, 100);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;


                            }
                        case "08":
                            {
                                p.Color = Color.FromArgb(100, 100, 0);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                        case "09":
                            {
                                p.Color = Color.FromArgb(100, 0, 0);
                                draw.DrawRectangle(p, a/2, i, 1, 1);
                                a++;
                                break;
                            }
                    }
                    #endregion
                }
            }
            draw.Dispose();
            bmp.Save("D:\\a.bmp");
        }
    }


[解决办法]

public Dictionary<string, Color> ColorTable;

Load:
   ColorTable = new Dictionary<string, Color>();
   ColorTable.Add("00", Color.FromArgb(0, 255, 0));
   ColorTable.Add("02", Color.FromArgb(255, 255, 0));
   ColorTable.Add("03", Color.FromArgb(0, 255, 255));
   ColorTable.Add("04", Color.FromArgb(0, 0, 0));
   ColorTable.Add("05", Color.FromArgb(255, 255, 255));
   ColorTable.Add("06", Color.FromArgb(0, 0, 255));
   ColorTable.Add("07", Color.FromArgb(100, 100, 100));
   ColorTable.Add("08", Color.FromArgb(100, 100, 0));
   ColorTable.Add("09", Color.FromArgb(100, 0, 0));

private void DrawImage(string s)
{
    string s1 = s.Replace("\r\n", "");
    int l, w;
    l = l4;
    w = a4;
    Bitmap bmp = new Bitmap(l, w);
    BitmapData bdata = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);


    byte[] buffer = new byte[bmp.Height * bdata.Stride];
    int index=0;
    for (int i = 0; i < buffer.Length; i += 4) //for 32 bit
    {
         Color color = ColorTable[s1.Substring(index, 2)];
         index += 2;
         buffer[i + 0] = color.B;
         buffer[i + 1] = color.G;
         buffer[i + 2] = color.R;
         buffer[i + 3] = color.A;
     }
     Marshal.Copy(buffer,0,bdata.Scan0,buffer.Length);
     bmp.UnlockBits(bdata);
     bmp.Save("D:\\a.bmp");
     bmp.Dispose();
}

热点排行