
我也并不觉得我写的代码你比你给出来的连接里面的效果弱
开始我以为代码是你写的情感不是你的
还是那句话思路都不清晰的代码你给我扯效率?。。bitblt。而且那代码中什么东西都只有创建没有删除
我不知道你统计那个帧有什么意义Graphics瞒住普通绘图绰绰有余不要把自己代码纯在的问题归咎与XXX语言不行XXX裤不行先看看自己是怎么写的代码在说吧
而且就算是要使用DC代码也不是你那样写

也比你上面的强
这类代码没准不比你写的少。。bitblt。几乎每个工程里面都有这类代码
publicstaticImageGetScreen(boolbCaptureCursor,boolbFromClipboard,Rectanglerect,outPointptMouseOfRect){
ptMouseOfRect=Point.Empty;
if(rect==Rectangle.Empty)returnnull;
PointptMouse=System.Windows.Forms.Control.MousePosition;
ptMouseOfRect=(Point)((Size)ptMouse-(Size)rect.Location);
IntPtrhDc=Win32.GetDC(IntPtr.Zero);//获取桌面dc
IntPtrhMemDc=Win32.CreateCompatibleDC(hDc);//创建与桌面兼容的内存dc
IntPtrhBmp=Win32.CreateCompatibleBitmap(hDc,rect.Width,rect.Height);//创建与桌面兼容的位图
IntPtrhOldBmp=Win32.SelectObject(hMemDc,hBmp);//将位图选入dc中
Win32.BitBlt(hMemDc,0,0,rect.Width,rect.Height,hDc,rect.X,rect.Y,Win32.SRCCOPY);//将桌面数据拷贝到内存dc里面去
using(Graphicsg=Graphics.FromHdc(hMemDc)){//之后的所有绘图都在内存dc中进行
if(bCaptureCursor&&rect.Contains(ptMouse)){//如果绘制鼠标的话
Win32.PCURSORINFOpci;
pci.cbSize=System.Runtime.InteropServices.Marshal.SizeOf(typeof(Win32.PCURSORINFO));
Win32.GetCursorInfo(outpci);
if(pci.hCursor!=IntPtr.Zero){
varcur=newSystem.Windows.Forms.Cursor(pci.hCursor);
varrect_cur=newRectangle((Point)((Size)ptMouse-(Size)rect.Location-(Size)cur.HotSpot),cur.Size);
cur.Draw(g,rect_cur);//如果采用的是Graphic.FromImage则绘制鼠标不会有混合模式比如光标反色之类的但是DC就可以
}
}
if(bFromClipboard){//如果需要从剪切板获取图像的话
Imageimg=System.Windows.Forms.Clipboard.GetImage();
if(img!=null){
using(SolidBrushsb=newSolidBrush(Color.FromArgb(125,0,0,0)))
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-31930-1.html
更新了