1.怎么建一画布或是说图形
(是不是 Bitmap myBitmap = new Bitmap(500, 600);这样的,偶建了不会用,郁闷中)2.怎么在这个画布上画图形
(图形我会画,不过是在窗体上的,在这画布上面用objGraphics.DrawArc(pen, 400, 50, 140, 70, 30, 180);这个画不出来,汗)3.我把标尺和网格都画出来了,可是我在缩放图片时,网格和标尺都不随着放大或缩小是怎么一回事啊 :(4.如何保存这张图片(顺便问一下,怎么导出AutoCad的格式)5.本来想多加点分的,为什么偶最高只能发100分的贴 555555555555555555555555
说明:
顶者有分,回答的请给出代码,小弟不甚感激
(是不是 Bitmap myBitmap = new Bitmap(500, 600);这样的,偶建了不会用,郁闷中)2.怎么在这个画布上画图形
(图形我会画,不过是在窗体上的,在这画布上面用objGraphics.DrawArc(pen, 400, 50, 140, 70, 30, 180);这个画不出来,汗)3.我把标尺和网格都画出来了,可是我在缩放图片时,网格和标尺都不随着放大或缩小是怎么一回事啊 :(4.如何保存这张图片(顺便问一下,怎么导出AutoCad的格式)5.本来想多加点分的,为什么偶最高只能发100分的贴 555555555555555555555555
说明:
顶者有分,回答的请给出代码,小弟不甚感激
从你上面的描述来看,你是不是想开发一个绘图软件,绘图软件的画板一般是自定义控件,你可以参照DrawTools2005,我已经上传了,你去下载区找。
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();
}
看来是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();
}
sb看上去怪怪的!:)
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));
}
}
}
Graphics g = Graphics.FromImage(bt);
g.DrawArc(pen, 400, 50, 140, 70, 30, 180);
不想窗体里,你可以在窗体中的控件中画,把代码写到控件的Paint事件中,如果你想往图片中画,使用下面的语句:C# code
Graphics dc = Graphics.FromImage(image);
只要取得Graphics对象,你就可以往里画图了。
从你上面的描述来看,你是不是想开发一个绘图软件,绘图软件的画板一般是自定义控件,你可以参照DrawTools2005,我已经上传了,你去下载区找。Graphics dc = Graphics.FromImage(image); 我用了,画不上去
这个查往图片中画图,你当然看不到什么效果了,你用image.Save(@"C:\test.jpg")保存到硬盘上,然后打开图片,你就可以看到效果了.或者干脆点,你画完后用Graphics的DrawImage方法在窗体中画出来看效果.
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();
还有这两个问题点求解一下上面那个主要是图片的缩放,下面的主要是导出AUTOCAD格式文件,
bm.Save("aa.jpg");
4.如何保存这张图片(顺便问一下,怎么导出AutoCad的格式)
同求
Graphics dc = Graphics.FromImage(image);
只要取得Graphics对象,你就可以往里画图了。
绝对绝对绝对的正解!!
我做了许多C#的游戏,都是这么画的,呵呵
赶紧试一下吧