|
Программирование >> Автоматически обновляемые приложения
г Лис Листинг 7.5. Рисование точки ( Graphics g = CreateGraphics(); Рисуем ряд красных точек for (int i = 0; i < 100; i+=5) g.FillRectangle(new SolidBrush(Color.Red), i, 10, 1, 1); g.Dispose 0 ; Примечание Примеры работы с цветом находятся в папке AboutColor на прилагаемом диске. Как получить цвет любой выбранной точки экрана? в этом примере мы сможем получить цвет любой точки на экране с помощью указателя мыши. Для этого добавьте на форму метку Label с именем labell, которая будет принимать цвет выбранной точки. Основные действия будут производиться при обработке событий метки MouseDown и MouseUp. В labeilMouseDown МЫ будем получать изображение текущего экрана, а в labeilMouseUp получим цвет, связанный с текущей позицией пиксела, на который указывает указатель мыши. Этот цвет мы присвоим фону метки (BackColor). Код приведен в листинге 7.6. using System.Runtime.InteropServices; private Bitmap myBitmap; [Dlllmport( user32.dll , EntryPoint = GetDC )] public static extern IntPtr GetDC(IntPtr hWnd); [Dlllmport( user32.dll , EntryPoint = GetDesktopWindow )] public static extern IntPtr GetDesktopWindow(); [Dlllmport( gdi32.dll , EntryPoint = CreateCompatibleDC )] public static extern IntPtr CreateCompatibleDC(IntPtr hdc); [Dlllmport( user32.dll , EntryPoint = GetSystemMetrics )] public static extern int GetSystemMetrics(int nindex); [Dlllmport( gdi32.dll , EntryPoint = CreateCompatibleBitmap )] public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight); [Dlllmport( gdi32.dll , EntryPoint = SelectObject )] public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobjBmp); [Dlllmport( 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); [Dlllmport( gdi32.dll , EntryPoint= DeleteDC )] public static extern IntPtr DeleteDC(IntPtr hdc); [Dlllmport( user32.dll , EntryPoint = ReleaseDC )] public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC); [Dlllmport( gdi32.dll ,EntryPoint= DeleteObject ) ] public static extern IntPtr DeleteObject(IntPtr hObject); public static Bitmap GetScreenColor() { 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. FromPibitmap (hBmp) , DeleteObject(hBmp); GC.Collect 0; return bmp; return null; private void labell MouseDown(object sender, MouseEventArgs e) { myBitmap = GetDesktop(); private void labell MouseUp(object sender, MouseEventArgs e) { Color myColor = myBitmap.GetPixeKMousePosition.X, MousePosition.Y), labell.BackColor = myColor; Нажмите мышкой на эту метку и удерживая ее, перетащите мышку в любое место экрана. Отпустите мышку и цвет, который в данный момент находится под указателем мышки, отобразится в метке. Рис. 7.1. Получение цвета в любой точке экрана
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |