Программирование >>  Автоматически обновляемые приложения 

1 ... 70 71 72 [ 73 ] 74 75 76 ... 170


г Лис

Листинг 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. Получение цвета в любой точке экрана



1 ... 70 71 72 [ 73 ] 74 75 76 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика