1.怎么建一画布或是说图形
        (是不是 Bitmap myBitmap = new Bitmap(500, 600);这样的,偶建了不会用,郁闷中)2.怎么在这个画布上画图形
        (图形我会画,不过是在窗体上的,在这画布上面用objGraphics.DrawArc(pen, 400, 50, 140, 70, 30, 180);这个画不出来,汗)3.我把标尺和网格都画出来了,可是我在缩放图片时,网格和标尺都不随着放大或缩小是怎么一回事啊 :(4.如何保存这张图片(顺便问一下,怎么导出AutoCad的格式)5.本来想多加点分的,为什么偶最高只能发100分的贴 555555555555555555555555
说明:
顶者有分,回答的请给出代码,小弟不甚感激

解决方案 »

  1.   

    不想窗体里,你可以在窗体中的控件中画,把代码写到控件的Paint事件中,如果你想往图片中画,使用下面的语句:            Graphics dc = Graphics.FromImage(image);            只要取得Graphics对象,你就可以往里画图了。
    从你上面的描述来看,你是不是想开发一个绘图软件,绘图软件的画板一般是自定义控件,你可以参照DrawTools2005,我已经上传了,你去下载区找。
      

  2.   

    在窗体上直接画线: 
          
            private int x, y;
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                x = e.X;
                y = e.Y;
            }        private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                Graphics g = this.CreateGraphics();
                SolidBrush sb = new SolidBrush(Color.Red);
                Pen p = new Pen(sb, 1);
                g.DrawLine(p, this.x, this.y, e.X, e.Y);
                p.Dispose();
                sb.Dispose();
                g.Dispose();
            }
      

  3.   

    Graphics dc = Graphics.FromImage(image);  我用了,画不上去  
      

  4.   

    http://hi.baidu.com/myselfdone/blog/item/def8fdfda707b246d6887d59.html
      

  5.   


    看来是VC转c#啊。你不一定非得在Bitmap上画图。你可以在任何一个容器里画图。比如panel,比如from等等。在vc中你需
    要CreateDC但是c#中也差不多。比如:你在Form上画图Graphics g = this.CreateGraphics()如果是panel Graphics g = this.panel.CreateGraphics()
    在窗体上直接画线: 
          
            private int x, y; 
            private void Form1_MouseDown(object sender, MouseEventArgs e) 
            { 
                x = e.X; 
                y = e.Y; 
            }         private void Form1_MouseUp(object sender, MouseEventArgs e) 
            { 
                Graphics g = this.CreateGraphics();             SolidBrush sb = new SolidBrush(Color.Red); 
                Pen p = new Pen(sb, 1); 
                g.DrawLine(p, this.x, this.y, e.X, e.Y); 
                p.Dispose(); 
                sb.Dispose(); 
                g.Dispose(); 
            }
      

  6.   

    SolidBrush sb = new SolidBrush(Color.Red);  
    sb看上去怪怪的!:)
      

  7.   

       Graphics g = PictureBox.CreateGraphics();  
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace Ex13_47
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        //标识是否正在绘图
            private bool isDrawing = false;
            //绘图时记录鼠标位置
            private Point MouseStartPoint, MouseOldPoint;
            //枚举各种绘图工具
            private enum DrawModes
            {
                Pen = 0, Line, Ellipse, Rectangle, Rubber, None
            };
            //当前使用工具
            private DrawModes DrawMode = DrawModes.None;
            //进行操作的位图
            private Image MyImg;
            //绘制位图实例对象
            private Graphics graphics;
            //绘图使用颜色
            private Color foreColor = Color.Black;
            private Color backColor = Color.White;        //新建
            private void toolStripButton1_Click(object sender, EventArgs e)
            {
                Graphics g = this.panel2.CreateGraphics();
                g.Clear(backColor);
                MyImg = new Bitmap(this.panel2.ClientRectangle.Width, this.panel2.ClientRectangle.Height);
                graphics = Graphics.FromImage(MyImg);
                graphics.Clear(backColor);
            }        //保存
            private void toolStripButton3_Click(object sender, EventArgs e)
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    MyImg.Save(saveFileDialog.FileName + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                }
            }        //颜色
            private void toolStripButton4_Click(object sender, EventArgs e)
            {
                ColorDialog colorDialog = new ColorDialog();
                if (colorDialog.ShowDialog() == DialogResult.OK)
                {
                    foreColor = colorDialog.Color;
                }
            }        //橡皮
            private void toolStripButton5_Click(object sender, EventArgs e)
            {
                DrawMode = DrawModes.Rubber;
            }        //任意线
            private void toolStripButton7_Click(object sender, EventArgs e)
            {
                DrawMode = DrawModes.Pen;
            }        //直线
            private void toolStripButton6_Click(object sender, EventArgs e)
            {
                
                DrawMode = DrawModes.Line;
            }
            
            //矩形
            private void toolStripButton8_Click(object sender, EventArgs e)
            {
                
                DrawMode = DrawModes.Rectangle;
            }        //椭圆
            private void toolStripButton9_Click(object sender, EventArgs e)
            {
                DrawMode = DrawModes.Ellipse;
            }        //记录绘制位置
            private void panel2_MouseDown(object sender, MouseEventArgs e)
            {
                if (this.MyImg == null)
                    return;
                if (e.Button == MouseButtons.Left)
                { //如果开始绘制,则开始记录鼠标位置
                    if ((isDrawing = !isDrawing) == true)
                    {
                        MouseStartPoint = new Point(e.X, e.Y);
                        MouseOldPoint = new Point(e.X, e.Y);
                    }
                }
            }
            //绘制图形的过程
            private void panel2_MouseMove(object sender, MouseEventArgs e)
            {
                
                if (this.MyImg == null)
                    return;
                Graphics g = this.panel2.CreateGraphics();
                if (isDrawing)
                {
                    switch (DrawMode)
                    {
                        case DrawModes.None:
                            break;
                        case DrawModes.Pen:
                            //从上一个点到当前点绘制线段
                            g.DrawLine(new Pen(foreColor, 1), MouseOldPoint, new Point(e.X, e.Y));
                            graphics.DrawLine(new Pen(foreColor, 1), MouseOldPoint, new Point(e.X, e.Y));
                            MouseOldPoint.X = e.X;
                            MouseOldPoint.Y = e.Y;
                            break;
                        case DrawModes.Line:
                            //首先恢复此次操作之前的图像,然后再添加Line
                            panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
                            g.DrawLine(new Pen(foreColor, 1), MouseStartPoint, new Point(e.X, e.Y));
                            break;
                        case DrawModes.Ellipse:
                            //首先恢复此次操作之前的图像,然后再添加Ellipse
                            panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
                            g.DrawEllipse(new Pen(foreColor, 1), MouseStartPoint.X, MouseStartPoint.Y, e.X - MouseStartPoint.X, e.Y - MouseStartPoint.Y);
                            break;
                        case DrawModes.Rectangle:
                            //首先恢复此次操作之前的图像,然后再添加Rectangle
                            panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
                            g.DrawRectangle(new Pen(foreColor, 1), MouseStartPoint.X, MouseStartPoint.Y, e.X - MouseStartPoint.X, e.Y - MouseStartPoint.Y);
                            break;
                        case DrawModes.Rubber:
                            //用背景色绘制宽线段
                            g.DrawLine(new Pen(backColor, 20), MouseOldPoint, new Point(e.X, e.Y));
                            graphics.DrawLine(new Pen(backColor, 20), MouseOldPoint, new Point(e.X, e.Y));
                            MouseOldPoint.X = e.X;
                            MouseOldPoint.Y = e.Y;
                            break;
                    }
                }
            }        //实际绘制图形
            private void panel2_MouseUp(object sender, MouseEventArgs e)
            {
                if (this.MyImg == null)
                    return;
                isDrawing = false;
                switch (DrawMode)
                {
                    case DrawModes.Line:
                        graphics.DrawLine(new Pen(foreColor, 1), MouseStartPoint, new Point(e.X, e.Y));
                        break;
                    case DrawModes.Ellipse:
                        graphics.DrawEllipse(new Pen(foreColor, 1), MouseStartPoint.X, MouseStartPoint.Y, e.X - MouseStartPoint.X, e.Y - MouseStartPoint.Y);
                        break;
                    case DrawModes.Rectangle:
                        graphics.DrawRectangle(new Pen(foreColor, 1), MouseStartPoint.X, MouseStartPoint.Y, e.X - MouseStartPoint.X, e.Y - MouseStartPoint.Y);
                        break;
                }
            }        //将Image中保存的图像,绘制出来
            private void panel2_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = this.panel2.CreateGraphics();
                if (MyImg != null)
                {
                    g.Clear(Color.White);
                    g.DrawImage(MyImg, this.panel2.ClientRectangle);
                }
            }
            //调整控件时绘制缩放后的图形
            private void panel2_Resize(object sender, EventArgs e)
            {
                
                panel2_Paint(this, new PaintEventArgs(this.panel2.CreateGraphics(), this.panel2.ClientRectangle));
            }
        }
    }
      

  9.   

    GDI+,哎,成过去式了。wpf一出,可以去坟墓了。
      

  10.   

            Bitmap bt = new Bitmap(1024, 1024);
            Graphics g = Graphics.FromImage(bt);
            g.DrawArc(pen, 400, 50, 140, 70, 30, 180);
      

  11.   

    个人还是崇尚GDI,处理GIS数据GDI足够了。
      

  12.   

    引用 8 楼 hustcyb 的回复:
    不想窗体里,你可以在窗体中的控件中画,把代码写到控件的Paint事件中,如果你想往图片中画,使用下面的语句:C# code
                Graphics dc = Graphics.FromImage(image);           
    只要取得Graphics对象,你就可以往里画图了。
    从你上面的描述来看,你是不是想开发一个绘图软件,绘图软件的画板一般是自定义控件,你可以参照DrawTools2005,我已经上传了,你去下载区找。Graphics dc = Graphics.FromImage(image); 我用了,画不上去 
    这个查往图片中画图,你当然看不到什么效果了,你用image.Save(@"C:\test.jpg")保存到硬盘上,然后打开图片,你就可以看到效果了.或者干脆点,你画完后用Graphics的DrawImage方法在窗体中画出来看效果.
      

  13.   

                Graphics g = this.CreateGraphics();
                Bitmap b = new Bitmap( 100, 100 );
                Graphics ig = Graphics.FromImage( b );
                ig.DrawArc( new Pen( Color.Blue, 10 ), 10, 10, 20, 70, 30, 180 );
                ig.Flush();
                g.DrawImage( (Image)b, new Point( 500, 300 ) );
                g.Flush();
      

  14.   

    图片就用你的BitmapSave( "file" );就可以保存。保存成AutoCad就没那么简单了吧。
      

  15.   

    谢谢大家的回答,画图小弟基本有点明白了,麻烦各位帮忙下面下面两点我把标尺和网格都画出来了,可是我在缩放图片时,网格和标尺都不随着放大或缩小是怎么一回事啊 :( 4.如何保存这张图片(顺便问一下,怎么导出AutoCad的格式
    还有这两个问题点求解一下上面那个主要是图片的缩放,下面的主要是导出AUTOCAD格式文件,
      

  16.   

    graphic.drawrangtangle()方法来创建一个画布。我有例子,如需要求发邮件[email protected]
      

  17.   

    Bitmap bm = new Bitmap(240, 210);
    bm.Save("aa.jpg");
      

  18.   


    4.如何保存这张图片(顺便问一下,怎么导出AutoCad的格式) 
    同求
      

  19.   

    C# code 
                Graphics dc = Graphics.FromImage(image);          
    只要取得Graphics对象,你就可以往里画图了。 
    绝对绝对绝对的正解!!
    我做了许多C#的游戏,都是这么画的,呵呵
    赶紧试一下吧