求,C#Graphics.DrawImage用法,

求,C#Graphics.DrawImage用法,,第1张

代码:

public void DrawImage(System.Drawing.Image image,System.

Drawing.Rectangle destRect,int srcX,int srcY,int srcWidth,int srcHeight,System.Drawing.GraphicsUnit srcUnit,System.

Drawing.Imaging.ImageAttributes imageAttrs,System.Drawing.

Graphics.DrawImageAbort callback,IntPtr callbackData)

参数

image

Image

要绘制的Image。

destRect

Rectangle

Rectangle结构,它指定所绘制图像的位置和大小。将图像进行缩放以适合该矩形

srcX

Int32

要绘制的源图像部分的左上角的x坐标。

srcY

Int32

要绘制的源图像部分的左上角的y坐标。

srcWidth

Int32

要绘制的源图像部分的宽度。

srcHeight

Int32

要绘制的源图像部分的高度。

srcUnit

GraphicsUnit

GraphicsUnit枚举的成员,它指定用于确定源矩形的度量单位。

imageAttrs

ImageAttributes

ImageAttributes,它指定image对象的重新着色和伽玛信息。

callback

Graphics.DrawImageAbort

Graphics.DrawImageAbort委托,它指定在绘制图像期间要调用的方法。此方法被频繁调用以检查是否根据应用程序确定的条件停止

DrawImage(Image,Rectangle,Int32,Int32,Int32,Int32,GraphicsUnit,ImageAttributes,

Graphics+DrawImageAbort,IntPtr)方法的执行。

callbackData

IntPtr

一个值,它为Graphics.DrawImageAbort委托指定在检查是否停止执行DrawImage方法时要使用的附加数据。

例外

ArgumentNullException

image为null。

扩展资料:

示例

下面的代码示例旨在与Windows窗体一起使用,并且它需要PaintEventArgse,它是Paint事件处理程序的参数。

代码首先为Graphics.DrawImageAbort委托定义回调方法;定义是简化的,仅测试DrawImage方法是否使用null callBackData参数调用该定义。

示例的主体执行以下 *** 作:

创建Graphics.DrawImageAbort回调方法的实例。

在示例的文件夹中创建SampImag JPEG文件中的图像。

创建定义要在其中绘制图像的目标矩形的点。

创建源矩形以选择要绘制的图像部分。

将图形绘图单位设置为像素。

将原始图像绘制到屏幕上。

创建一个要在其中绘制调整后的图像的附加目标矩形。

创建并设置调整后的图像的属性,使其具有比平时更大的伽玛值。

在屏幕上绘制调整后的图像。

对于原始的unadjusted目标矩形,位置在屏幕上定位图像,源矩形的大小和目标矩形的大小和形状决定了所绘制图像的缩放。

由于此示例使用传递了一个callBackData参数的重载,因此Graphics.DrawImageAbort回调返回false,这将导致DrawImage方法继续,此示例将调整后的图像绘制到屏幕上。

代码:

// Define DrawImageAbort callback method.

private bool DrawImageCallback6(IntPtr callBackData)

{

// Test for call that passes callBackData parameter.

if(callBackData==IntPtr.Zero)

{

// If no callBackData passed, abort DrawImage method.

return true

}

else

{

// If callBackData passed, continue DrawImage method.

return false

}

}

private void DrawImageRect4IntAtrribAbortData(PaintEventArgs e)

{

// Create callback method.

Graphics.DrawImageAbort imageCallback

= new Graphics.DrawImageAbort(DrawImageCallback6)

IntPtr imageCallbackData = new IntPtr(1)

// Create image.

Image newImage = Image.FromFile("SampImag.jpg")

// Create rectangle for displaying original image.

Rectangle destRect1 = new Rectangle(100, 25, 450, 150)

// Create coordinates of rectangle for source image.

int x = 50

int y = 50

int width = 150

int height = 150

GraphicsUnit units = GraphicsUnit.Pixel

// Draw original image to screen.

e.Graphics.DrawImage(newImage, destRect1, x, y, width, height, units)

// Create rectangle for adjusted image.

Rectangle destRect2 = new Rectangle(100, 175, 450, 150)

// Create image attributes and set large gamma.

ImageAttributes imageAttr = new ImageAttributes()

imageAttr.SetGamma(4.0F)

try

{

checked

{

// Draw adjusted image to screen.

e.Graphics.DrawImage(

newImage,

destRect2,

x, y,

width, height,

units,

imageAttr,

imageCallback,

imageCallbackData)

}

}

catch (Exception ex)

{

e.Graphics.DrawString(

ex.ToString(),

new Font("Arial", 8),

Brushes.Black,

new PointF(0, 0))

}

}

不明白你的问题,从他的代理来看的话

public delegate void PaintEventHandler(object sender, PaintEventArgs e)

它的参数就是object sender, PaintEventArgs e

OnPaint是Control类中的方法,Paint是事件,Paint是用于改变部分显示用比较合适,实际上Paint事件在OnPaint中被调用,如果你重写OnPaint但是不调用base.OnPaint(e)的话Paint事件就失效了,所以对于自定义控件而言要改变外观重写OnPaint更合适,一般情况下绘制图形编写Paint事件的处理方法就行。

另外做小游戏的话,用PictureBox代替Panel做绘图板面比较合适,因为默认双缓冲,不容易闪。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12128385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存