////////////////////////////////////////////////////////////////
///
/// 截取部分屏幕
///
/// 左上角
/// 右下角
/// 是否全屏幕
/// 返回值Bitmap
public Bitmap GetPartScreen(Point P1, Point P2, bool Full)
{
IntPtr hscrdc, hmemdc;
IntPtr hbitmap, holdbitmap;
int nx, ny, nx2, ny2;
nx = ny = nx2 = ny2 = 0;
int nwidth, nheight;
int xscrn, yscrn;
hscrdc = _gMapView.GetHdc();
hmemdc = CreateCompatibleDC(hscrdc);//创建一个内存DC xscrn = 1024; //获取屏幕宽度
yscrn = 768;//获取屏幕高度
if (Full)//如果是截取整个屏幕
{
nx = 0;
ny = 0;
nx2 = xscrn;
ny2 = yscrn;
}
else
{
nx = P1.X;
ny = P1.Y;
nx2 = P2.X;
ny2 = P2.Y;
//检查数值合法性 if (nx < 0) nx = 0;
if (ny < 0) ny = 0;
if (nx2 > xscrn) nx2 = xscrn;
if (ny2 > yscrn) ny2 = yscrn;
}
nwidth = nx2 - nx;//截取范围的宽度 nheight = ny2 - ny;//截取范围的高度 hbitmap = CreateCompatibleBitmap(hscrdc, nwidth, nheight);//从内存DC复制到hbitmap句柄 这里可能有问题................................... holdbitmap = SelectObject(hmemdc, hbitmap); BitBlt(hmemdc, 0, 0, nwidth, nheight, hscrdc, nx, ny, (UInt32)0xcc0020); hbitmap = SelectObject(hmemdc, holdbitmap); DeleteDC(hscrdc);//删除用过的对象 DeleteDC(hmemdc);//删除用过的对象 _gMapView.ReleaseHdc();
return Bitmap.FromHbitmap(hbitmap);//用Bitmap.FromHbitmap从hbitmap返回Bitmap
}如上,在开发环境下多次运行该过程,会出错,我认为可能是 我加注可能存在问题的资源没有得到释放.请有相关开发经验的大哥大姐帮忙改一下代码,谢谢
///
/// 截取部分屏幕
///
/// 左上角
/// 右下角
/// 是否全屏幕
/// 返回值Bitmap
public Bitmap GetPartScreen(Point P1, Point P2, bool Full)
{
IntPtr hscrdc, hmemdc;
IntPtr hbitmap, holdbitmap;
int nx, ny, nx2, ny2;
nx = ny = nx2 = ny2 = 0;
int nwidth, nheight;
int xscrn, yscrn;
hscrdc = _gMapView.GetHdc();
hmemdc = CreateCompatibleDC(hscrdc);//创建一个内存DC xscrn = 1024; //获取屏幕宽度
yscrn = 768;//获取屏幕高度
if (Full)//如果是截取整个屏幕
{
nx = 0;
ny = 0;
nx2 = xscrn;
ny2 = yscrn;
}
else
{
nx = P1.X;
ny = P1.Y;
nx2 = P2.X;
ny2 = P2.Y;
//检查数值合法性 if (nx < 0) nx = 0;
if (ny < 0) ny = 0;
if (nx2 > xscrn) nx2 = xscrn;
if (ny2 > yscrn) ny2 = yscrn;
}
nwidth = nx2 - nx;//截取范围的宽度 nheight = ny2 - ny;//截取范围的高度 hbitmap = CreateCompatibleBitmap(hscrdc, nwidth, nheight);//从内存DC复制到hbitmap句柄 这里可能有问题................................... holdbitmap = SelectObject(hmemdc, hbitmap); BitBlt(hmemdc, 0, 0, nwidth, nheight, hscrdc, nx, ny, (UInt32)0xcc0020); hbitmap = SelectObject(hmemdc, holdbitmap); DeleteDC(hscrdc);//删除用过的对象 DeleteDC(hmemdc);//删除用过的对象 _gMapView.ReleaseHdc();
return Bitmap.FromHbitmap(hbitmap);//用Bitmap.FromHbitmap从hbitmap返回Bitmap
}如上,在开发环境下多次运行该过程,会出错,我认为可能是 我加注可能存在问题的资源没有得到释放.请有相关开发经验的大哥大姐帮忙改一下代码,谢谢
DeleteObject( hbitmap );谢谢给分