“Clone”方法没有采用“2”个参数的重载 想用bitmap类的clone函数作分割图像,但是显示上面的错误,在msdn中明明有这样的重载,网上的例子也是这么写的,为什么不行呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 RectangleF part = new RectangleF(0,0,400,400);//像素矩阵Bitmap s = MyImage.Clone(part, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);这样写对吗 如果你的MyImage是通过这样定义的,即Bitmap对象,就没有错: Bitmap MyImage = new Bitmap("C:/test.BMP"); rect = new Rectangle(); rect = Screen.GetWorkingArea(this); //创建一个以当前屏幕为模板的图象 g1 = this.CreateGraphics(); //创建以屏幕大小为标准的位图 Bitmap MyImage = new Bitmap(rect.Width, rect.Height, g1); g2 = Graphics.FromImage(MyImage); //得到屏幕的DC dc1 = g1.GetHdc(); //得到Bitmap的DC dc2 = g2.GetHdc(); //调用此API函数,实现屏幕捕获 BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376); //释放掉屏幕的DC g1.ReleaseHdc(dc1); //释放掉Bitmap的DC g2.ReleaseHdc(dc2); //以JPG文件格式来保存 楼主,下面的代码没问题,可以参照这个例子修改private void button1_Click(object sender, EventArgs e){ GetScreenIng_Class sc = new GetScreenIng_Class(); System.Drawing.Bitmap img = sc.GetScreenImg(); img.Save("c:\\screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片为jpeg格式}class GetScreenIng_Class{ [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern bool BitBlt( IntPtr hdcDest, //目标设备的句柄 int nXDest, // 目标对象的左上角的X坐标 int nYDest, // 目标对象的左上角的Y坐标 int nWidth, // 目标对象的矩形的宽度 int nHeight, // 目标对象的矩形的高度 IntPtr hdcSrc, // 源设备的句柄 int nXSrc, // 源对象的左上角的X坐标 int nYSrc, // 源对象的左上角的Y坐标 System.Int32 dwRop // 光栅的操作值 ); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern IntPtr CreateDC( string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定为"NULL" IntPtr lpInitData // 任意的打印机数据 ); public Bitmap GetScreenImg() { Bitmap MyImage = null; IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null); //创建显示器的DC Graphics g1 = Graphics.FromHdc(dc1); //由一个指定设备的句柄创建一个新的Graphics对象 MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1); //根据屏幕大小创建一个与之相同大小的Bitmap对象 Graphics g2 = Graphics.FromImage(MyImage); //获得屏幕的句柄 IntPtr dc3 = g1.GetHdc(); //获得位图的句柄 IntPtr dc2 = g2.GetHdc(); //把当前屏幕捕获到位图对象中 BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376); //把当前屏幕拷贝到位图中 g1.ReleaseHdc(dc3); //释放屏幕句柄 g2.ReleaseHdc(dc2); //释放位图句柄 return MyImage; }} rect = new Rectangle(); rect = Screen.GetWorkingArea(this); //创建一个以当前屏幕为模板的图象 g1 = this.CreateGraphics(); //创建以屏幕大小为标准的位图 Bitmap MyImage = new Bitmap(rect.Width, rect.Height, g1); g2 = Graphics.FromImage(MyImage); //得到屏幕的DC dc1 = g1.GetHdc(); //得到Bitmap的DC dc2 = g2.GetHdc(); //调用此API函数,实现屏幕捕获 BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376); //释放掉屏幕的DC g1.ReleaseHdc(dc1); //释放掉Bitmap的DC g2.ReleaseHdc(dc2); //以JPG文件格式来保存 RectangleF part = new RectangleF(0,0,400,400);//像素矩阵 Bitmap s = MyImage.Clone(part,System.Drawing.Imaging.PixelFormat.Format32bppPArgb);我主要是想分割图像,后面两句的错误 试试,保存部分图,没问题private void button1_Click(object sender, EventArgs e){ GetScreenIng_Class sc = new GetScreenIng_Class(); System.Drawing.Bitmap img = sc.GetScreenImg(); img.Save("c:\\screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片为jpeg格式 RectangleF part = new RectangleF(0,0,400,400);//像素矩阵 Bitmap s = img.Clone(part,PixelFormat.Format32bppPArgb); s.Save("c:\\part.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); //保存部分图片为jpeg格式}class GetScreenIng_Class{ [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern bool BitBlt( IntPtr hdcDest, //目标设备的句柄 int nXDest, // 目标对象的左上角的X坐标 int nYDest, // 目标对象的左上角的Y坐标 int nWidth, // 目标对象的矩形的宽度 int nHeight, // 目标对象的矩形的高度 IntPtr hdcSrc, // 源设备的句柄 int nXSrc, // 源对象的左上角的X坐标 int nYSrc, // 源对象的左上角的Y坐标 System.Int32 dwRop // 光栅的操作值 ); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern IntPtr CreateDC( string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定为"NULL" IntPtr lpInitData // 任意的打印机数据 ); public Bitmap GetScreenImg() { Bitmap MyImage = null; IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null); //创建显示器的DC Graphics g1 = Graphics.FromHdc(dc1); //由一个指定设备的句柄创建一个新的Graphics对象 MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1); //根据屏幕大小创建一个与之相同大小的Bitmap对象 Graphics g2 = Graphics.FromImage(MyImage); //获得屏幕的句柄 IntPtr dc3 = g1.GetHdc(); //获得位图的句柄 IntPtr dc2 = g2.GetHdc(); //把当前屏幕捕获到位图对象中 BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376); //把当前屏幕拷贝到位图中 g1.ReleaseHdc(dc3); //释放屏幕句柄 g2.ReleaseHdc(dc2); //释放位图句柄 return MyImage; }} arraylist 二维数组取值问题 C#中怎样取绝对值 C#分割字符串 需要频繁追加内容,listbox和textbox哪个资源占用更少? 水晶报表问题 怎样用Atlas定时刷新网页某个数据区域,如gridview??(页面不能刷) 请问比较两个同类型对象的每个属性值相等与否用什么函数!谢谢! 各位大虾帮帮忙说下"解题"的思路 菜鸟发话了,一个逻辑的问题 连数据库的问题。很急在线等。 Text获取焦点小问题 批量保存修改数据到数据库
Bitmap s = MyImage.Clone(part, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
这样写对吗
如果你的MyImage是通过这样定义的,即Bitmap对象,就没有错:
Bitmap MyImage = new Bitmap("C:/test.BMP");
rect = Screen.GetWorkingArea(this);
//创建一个以当前屏幕为模板的图象
g1 = this.CreateGraphics();
//创建以屏幕大小为标准的位图
Bitmap MyImage = new Bitmap(rect.Width, rect.Height, g1);
g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
dc1 = g1.GetHdc();
//得到Bitmap的DC
dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获
BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
//以JPG文件格式来保存
{
GetScreenIng_Class sc = new GetScreenIng_Class();
System.Drawing.Bitmap img = sc.GetScreenImg();
img.Save("c:\\screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片为jpeg格式
}class GetScreenIng_Class
{
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, //目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的Y坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的高度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的Y坐标
System.Int32 dwRop // 光栅的操作值
);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定为"NULL"
IntPtr lpInitData // 任意的打印机数据
);
public Bitmap GetScreenImg()
{
Bitmap MyImage = null;
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//创建显示器的DC
Graphics g1 = Graphics.FromHdc(dc1);
//由一个指定设备的句柄创建一个新的Graphics对象
MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
//根据屏幕大小创建一个与之相同大小的Bitmap对象
Graphics g2 = Graphics.FromImage(MyImage);
//获得屏幕的句柄
IntPtr dc3 = g1.GetHdc();
//获得位图的句柄
IntPtr dc2 = g2.GetHdc();
//把当前屏幕捕获到位图对象中
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
//把当前屏幕拷贝到位图中
g1.ReleaseHdc(dc3);
//释放屏幕句柄
g2.ReleaseHdc(dc2);
//释放位图句柄
return MyImage;
}
}
rect = Screen.GetWorkingArea(this);
//创建一个以当前屏幕为模板的图象
g1 = this.CreateGraphics();
//创建以屏幕大小为标准的位图
Bitmap MyImage = new Bitmap(rect.Width, rect.Height, g1);
g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
dc1 = g1.GetHdc();
//得到Bitmap的DC
dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获
BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
//以JPG文件格式来保存
RectangleF part = new RectangleF(0,0,400,400);//像素矩阵
Bitmap s = MyImage.Clone(part,System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
我主要是想分割图像,后面两句的错误
{
GetScreenIng_Class sc = new GetScreenIng_Class();
System.Drawing.Bitmap img = sc.GetScreenImg();
img.Save("c:\\screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片为jpeg格式
RectangleF part = new RectangleF(0,0,400,400);//像素矩阵
Bitmap s = img.Clone(part,PixelFormat.Format32bppPArgb);
s.Save("c:\\part.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); //保存部分图片为jpeg格式}class GetScreenIng_Class
{
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, //目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的Y坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的高度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的Y坐标
System.Int32 dwRop // 光栅的操作值
);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定为"NULL"
IntPtr lpInitData // 任意的打印机数据
);
public Bitmap GetScreenImg()
{
Bitmap MyImage = null;
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//创建显示器的DC
Graphics g1 = Graphics.FromHdc(dc1);
//由一个指定设备的句柄创建一个新的Graphics对象
MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
//根据屏幕大小创建一个与之相同大小的Bitmap对象
Graphics g2 = Graphics.FromImage(MyImage);
//获得屏幕的句柄
IntPtr dc3 = g1.GetHdc();
//获得位图的句柄
IntPtr dc2 = g2.GetHdc();
//把当前屏幕捕获到位图对象中
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
//把当前屏幕拷贝到位图中
g1.ReleaseHdc(dc3);
//释放屏幕句柄
g2.ReleaseHdc(dc2);
//释放位图句柄
return MyImage;
}
}