问一个GDI+函数在C#怎么写的.

Yun__ 2012-08-12 11:34:08
GdipCreateBitmapFromScan0 这个函数 在VB是GdipCreateBitmapFromScan0(Width,Height,stride,PixelFormat,scan0,bitmap)

但是在c#怎么使用的?

在Drawing里面.
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yun__ 2012-08-12
  • 打赏
  • 举报
回复
我去。。。2楼用不用这么复制 ,,, 3楼正解 其实为Bitmap(int width,int height,PixelFormat format) 这样就是一个创建为像素的位图了
蒋晟 2012-08-12
  • 打赏
  • 举报
回复
用这个构造函数
public Bitmap(
int width,
int height,
int stride,
PixelFormat format,
IntPtr scan0
)
http://msdn.microsoft.com/en-us/library/zy1a2d14.aspx
赢友网络 2012-08-12
  • 打赏
  • 举报
回复
GDI:GDI也叫图形设备接口(Graphices Device Interface)是windows的子系统,它是一组API,它专门负责向计算机输出设备绘制图形,这些输出设备可以使我们面前的显示器也可以是打印机,传真机等。GDI对于我们很重要,我们编写的可视化软件需要调用GDI才可以显示,就连Windows本身的窗口元素也是操作系统调用GDI绘制出来的。从编程的角度上来讲,GDI就是一套C++语言的函数库,这个由几百个API构成的函数库通常存放在系统的GDI32.DLL动态链接库中。
GDI+是GDI的下一版本,GDI+使用面向对象的方式扩展和封装了GDI函数,把原来的GDI函数通过一些类包装起来,当然这样做有利于我们更简单的使用GDI。

介绍一个名词:DC,DC是设备环境的意思。设备环境对象DC是GDI和具体设备驱动之间的一个中转站,它隔开了GDI和具体设备之间的依赖,这样做非常有好处,比如我们可以用同一个GDI函数分别向显示器和打印机等任何设备绘图,所做到工作只需给GDI一个目标DC即可。GDI的这种特性就叫“设备无关性”,通过这种“设备无关性”,在使用GDI进行编程时可以使用同样的GDI绘图代码分别向打印机和显示器绘图,此时绘图的效果是一样的。

要在显示器中显示,首先会获得一个显示器设备环境( DC对象)。在.NET类库中GDI+和DC都被封装在一个叫Graphic类里,我们不需要手动获得DC,Graphic对象会根据上下文环境自动获得合适的DC,我们所能做的就是调用Graphic里面与设备无关的GDI+绘图方法绘图即可。

画直线和曲线:

绘制直线或曲线需要用到画笔对象(Pen)和结构体(Point)。
Point对象表示屏幕上一个点,我们可以把Windows 窗体看成一个平面,这个平面的坐标系是从窗体的左上角(注意绘图区域要除去窗体的标题栏和菜单栏)开始的,(0,0)坐标原点就是窗体的左上角。从左上角往右是平面的x坐标轴,往下就是窗体y的坐标轴。
Point是个结构体,有三个属性,X,Y,和IsEmpty。X属性表示此点的X坐标值,Y属性表示此点的Y坐标值,都是整数类型的,属性IsEmpty是bool型用来判断Point对象是否为空。另外Point还有一个比较常用的方法Offset,此方法可以让某个点平移指定的量,平移后的坐标为:当前X坐标+X轴平移量。当前Y坐标+Y轴平移量。
Point构造方法有两种,一种是不带参数的。不带参数的构造方法创建的是一个空点。另外一种是带参数的构造方法,通常带两个参数,也就是该点的X和Y坐标。

画笔用来创建指定宽度和样式的线条,线条的样式可以是虚线、实线、纯色和纹理线条等。创建画笔对象可以使用系统画笔类SystemPens或Pens,这些系统类可以创建常用的默认画笔,一般画出的线条宽度为1个像素。
//创建系统控件颜色画笔:Pen p0 =systemPens.Control;
//创建红色画笔:Pen p1=Pens.Red;
//也可以使用画笔类直接创建画笔:Pen p2=new Pen(Color.FormArgb(255.0.0))

画笔的构造参数里是一个颜色对象(Color),颜色对象使用颜色类来创建。我们可以简单的使用Color类的静态方法FromArgb来创建我们需要的颜色。这个方法的三个参数分别是表示R、G、B的浓度值。
画笔最重要的属性莫过于画笔的颜色和画笔的宽度。它们分别对应画笔类的Color属性和Width属性。我们可以创建画笔的时候设置好画笔的颜色,而画笔的宽度在创建在创建玩画笔后设置的。宽度可以定义画笔的粗细,以像素为单位。

ClientSize表示某个矩形区域的宽度和高度。在这里ClientSize表示当前Form窗口的“客户”区域的宽度和高度。“客户”区域是指窗体除掉菜单和标题栏剩下的那部分。
另外注意的是:CreateGraphics方法表示得到当前控件的Graphice对象,有个这个对象我们就可以通过GDI+画图了。
画直线的代码:
Pen pen = Pens.Red;
Point p1 = new Point(0, 0);
Point p2 = new Point(this.ClientSize.Width, this.ClientSize.Height); //ClientSize获取窗体工作区的宽度和高度
Graphics gdi = this.CreateGraphics(); //得到当前控件的Graphics对象
gdi.DrawLine(pen, p1, p2);

画矩形:Graphics.DrawRectangle(pen p,int x,int y, int width,int height)
画椭圆:Graphics.DrawEllipse(pen p,int x,int y,int width,int height)

Size对象存储一个有序整数对,通常表示某个矩形区域的宽度和高度。

Rectangle累和Point,Size相似,它是一个结构体,它存储四个数,这四个数可以表示一个矩形的位置和大小,这四个数分别表示矩形起点坐标和矩形宽度机高度,对应到Rectangle的属性分别是X、Y、Width、Height。另外我们形象地称矩形左上角Y坐标为矩形顶部,左上角X坐标为左部,右下角Y坐标为底部,右下角X坐标为右部,所以矩形也可以用这些属性来表示,对应到Rectangle累的属性就是Top、Left、Bottom、Right。我们又知道矩形宽度和高度可以使用Size对象来表示,所以Rectangle类也有Size属性表示矩形的宽和高。

对于矩形来讲也有偏移方法Offset,用法和Point方法一样,和Point不同的是矩形有放大方法Inflate。使用这个方法可以把矩形进行放大,Inflate介绍两个参数,分别表示X轴和Y轴向外扩大的像素数。放大是矩形的中心不变,围绕中心矩形像四周扩展。
定义矩形有两种方法:Rectangle rec =new Rectangle(0,0,50,50);
Rectangle rec =new Rectangle(new Point(0,0),new Size(50,50));

刷子的种类有五种:SolidBrush,纯色刷子,使用一种纯色填充区域。
TextureBrush,图像刷子,使用图像来填充区域。
LinearGradientBrush,渐变刷子,使用图像来填充区域。
HatchBrush,阴影刷子,使用阴影来填充区域。
PathGradientBrush,路径刷子,使用一个路径渐变色来填充区域。
这五种刷子都是Brush的子类,Brush本身是抽象类,需要用子类对象来实例化。
系统为我们提供了两个类来创建各种标准颜色和样式刷子,分别是Brushes和SystemBrushes

使用系统刷子类创建蓝色刷子:
//创建蓝色刷子 Brush brush=Brushes.Blue;
//创建和控件背景色一样的刷子:Brush brush=SystemBrushes.Control;

纯色刷子基本上不需要自己定义,用着两个类创建即可。也就是用子类对象实例化。
图像刷子最重要的属性就是Image,这个属性代表要填充区域的图像是一个系统Image对象,可以是创建的时候由构造参数传入,举个例子:
Brush b=new TextureBrush(Image.FromFile(完整路径));

如何用GDI+画图像:首先需要一个Image图像对象,然后一个Graphics对象,有了这两个必要条件,你只需调用Graphics对象的DrawImage方法像窗体画图就可以了。

建立Image对象的最简单方法就是调用Image类的FromFile方法,当然这不是唯一的方法。Image类是一个抽象类,它是所有具体图像类的基类,基于他的子类有位图类Bitmap和图元类Metafile。

GDI+中用于画图的方法是DrawImage,这个方法有很多重载,常用的有下面几个版本
画图像:Graphics.DrawImage(image img,int x,int y ,int width,int height)
或Graphics.DrawImage(Image img, Rectangle rec)
参数分别是:刷子、图像起点x,y坐标,图像的宽度和高度。
画图像:Graphics.DrawImage(image img,int x,int y)
或Graphics.DrawImage(Image img,Point p)
参数解释:所需参数分别是:刷子、图像起点X,y坐标,不指定图像的宽度和高度。

绘制字体:
Font类有一个构造方法可以用字体种类名称和字体大小创建字体对象。
Font f=new Font(“宋体”,30);
字体的颜色是画字体的时候给定的,字体本身并没有颜色属性,字体的种类也叫字样,专门有一个类来描述字样,就是FontFamily类,当然我们在定义字体的时候并不需要这个类,我们只需要把字样的名称给字体类的构造方法就可以了。
当然,字样类FontFimaily也有特别的用处,比如我们可以通过列举系统支持的字体类型。FontFamily最重要的属性莫过于Families,这是一个静态属性。

字体的样式采用FontStyle枚举定义,共分为五种,分别是:
1) Bold,加粗文本
2) Italic,倾斜文本
3) Regular,普通文本
4) Underline,带下划线的文本
5) Strikeout,删除线文本

这里要注意的是,如果要建立两种样式混合的字体(比如既是粗体又是斜体的文本)要使用与或(“^”)连接。比如:
FontStyle fontstyle=FontStyle.Blod^FontStyle.Italic;
Font f=new Font(“宋体”,30,fontstyle);

我们可以使用字样类的IsStyleAvailable方法来判断字体是否支持某个字体样式,如果不知道臭该样式IsStyleAvailable将会返回布尔值False。

画字符串:Graphics.DrawString(string s,Font f,Brush b,Point p)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧