刚学C#,想取出屏幕上(200,300)那个点的颜色信息,请帮忙好吗?越详细越好!我还不知怎样用API
想取出屏幕上(200,300)那个点的颜色信息,请帮忙好吗?越详细越好!我还不知怎样用API
------解决方案--------------------c#类库
------解决方案--------------------public partial class Form1 : Form 
     { 
         public Form1() 
         { 
             InitializeComponent(); 
             Bitmap img=new Bitmap(1027,768); 
             Graphics g = Graphics.FromImage(img); 
             g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(1024, 768)); 
             Color color = img.GetPixel(200, 300); 
         } 
     }
------解决方案--------------------可以使用win32 API  GetPixel直接取点的颜色信息
------解决方案--------------------public class Win32APICall 
 { 
 	[DllImport( "gdi32.dll ",EntryPoint= "DeleteDC ")] 
 	public static extern IntPtr DeleteDC(IntPtr hdc);   
 	[DllImport( "gdi32.dll ",EntryPoint= "DeleteObject ")] 
 	public static extern IntPtr DeleteObject(IntPtr hObject);   
 	[DllImport( "gdi32.dll ",EntryPoint= "BitBlt ")] 
 	public static extern bool BitBlt(IntPtr hdcDest,int nXDest, 
 		int nYDest,int nWidth,int nHeight,IntPtr hdcSrc, 
 		int nXSrc,int nYSrc,int dwRop);   
 	[DllImport ( "gdi32.dll ",EntryPoint= "CreateCompatibleBitmap ")] 
 	public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,  
 		int nWidth, int nHeight);   
 	[DllImport ( "gdi32.dll ",EntryPoint= "CreateCompatibleDC ")] 
 	public static extern IntPtr CreateCompatibleDC(IntPtr hdc);   
 	[DllImport ( "gdi32.dll ",EntryPoint= "SelectObject ")] 
 	public static extern IntPtr SelectObject(IntPtr hdc,IntPtr hgdiobjBmp);   
 	[DllImport( "user32.dll ", EntryPoint= "GetDesktopWindow ")] 
 	public static extern IntPtr GetDesktopWindow();   
 	[DllImport( "user32.dll ",EntryPoint= "GetDC ")] 
 	public static extern IntPtr GetDC(IntPtr hWnd);   
 	[DllImport( "user32.dll ",EntryPoint= "GetSystemMetrics ")] 
 	public static extern int GetSystemMetrics(int nIndex);   
 	[DllImport( "user32.dll ",EntryPoint= "ReleaseDC ")] 
 	public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDC);   
 	public static Bitmap GetDesktop() 
 	{ 
 		int screenX; 
 		int screenY; 
 		IntPtr hBmp; 
 		IntPtr  hdcScreen = GetDC(GetDesktopWindow()); 
 		IntPtr hdcCompatible = CreateCompatibleDC(hdcScreen);   
 		screenX = GetSystemMetrics(0); 
 		screenY = GetSystemMetrics(1); 
 		hBmp = CreateCompatibleBitmap(hdcScreen, screenX, screenY);   
 		if (hBmp!=IntPtr.Zero) 
 		{ 
 			IntPtr hOldBmp = (IntPtr) SelectObject(hdcCompatible, hBmp); 
 			BitBlt(hdcCompatible, 0, 0,screenX,screenY, hdcScreen, 0, 0,13369376);  			 
 			SelectObject(hdcCompatible, hOldBmp); 
 			DeleteDC(hdcCompatible); 
 			ReleaseDC(GetDesktopWindow(), hdcScreen);  			 
 			Bitmap bmp = System.Drawing.Image.FromHbitmap(hBmp);   			 
 			DeleteObject(hBmp); 
 			GC.Collect();  			 
 			return bmp; 
 		}  		 
 		return null; 
 	} 
 }     
 得到 Screen 的 BitMap 后. 
 再用 getpixel 就可以得到点的颜色了....     
------解决方案--------------------不用像zhqs1000(子鱼) 兄那样 先拷贝位图块