Чтение онлайн

на главную - закладки

Жанры

Программирование КПК и смартфонов на .NET Compact Framework

Климов Александр Петрович

Шрифт:

public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest,

 int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);

 const int SRCCOPY = 0x00CC0020;

private void screenshot(string filename, Graphics gx, Rectangle rect) {

 Bitmap bmp = new Bitmap(rect.Width, rect.Height);

 Graphics g = Graphics.FromImage(bmp);

 BitBlt(g.GetHdc, 0, 0, rect.Width, rect.Height, gx.GetHdc,

rect.Left, rect.Top, SRCCOPY);

 bmp.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp);

 bmp.Dispose;

 g.Dispose;

}

private void butPartOfWindow_Click(object sender, EventArgs e) {

 //
Делаем снимок списка

 ScreenShot(@"\My Documents\save.bmp", this.CreateGraphics,

listBox1.Bounds);

}

private void butScreen_Click(object sender, EventArgs e) {

 // Делаем снимок экрана

 Rectangle rect = new Rectangle(0,0,240,240);

 Bitmap bmp = new Bitmap(rect.Width, rect.Height);

 Graphics g = Graphics.FromImage(bmp);

 IntPtr hwnd = GetDesktopWindow;

 IntPtr hdc = GetDC(hwnd);

 BitBlt(g.GetHdc, 0, 0, rect.Width, rect.Height, hdc, rect.Left,

rect.Top, SRCCOPY);

 bmp.Save(@"\My Documents\screen.bmp",

 System.Drawing.Imaging.ImageFormat.Bmp);

 // Освобождаем ресурсы

 ReleaseDC(hwnd, hdc);

 bmp.Dispose;

 g.Dispose;

}

private void timer1_Tick(object sender, EventArgs e) {

 // Делаем снимок экрана через 5 секунд

 Rectangle rect = new Rectangle(0, 0. 240, 240);

 Bitmap bmp = new Bitmap(rect.Width, rect.Height);

 Graphics g = Graphics.FromImage(bmp);

 IntPtr hwnd = GetDesktopWindow;

 IntPtr hdc = GetDC(hwnd);

 BitBlt(g.GetHdc, 0, 0, rect.Width, rect.Height, hdc, rect.Left,

rect.Top, SRCCOPY);

 bmp.Save(@"\My Documents\5sec.bmp", System.Drawing.Imaging.ImageFormat.Bmp);

 // Освобождаем ресурсы

 ReleaseDC(hwnd, hdc);

 bmp.Dispose;

 g.Dispose;

 timer1.Enabled = false;

}

private void but5Sec_Click(object sender, EventArgs e) {

 timer1.Enabled = true;

}

Функция

ScreenShot
позволяет быстро получить участок экрана и сохранить его в графическом файле. В рассмотренном примере внешний вид списка сохраняется в файле
listbox.bmp
. Для этого достаточно было указать имя файла, объект
Graphics
и размеры списка
ListBox
. Для получения снимка экрана пример пришлось несколько усложнить, добавив вызовы функций
GetDesktopWindow
и
GetDC
.

Если нужно получить снимок другой программы, то придется воспользоваться таймером. После запуска таймера в распоряжении пользователя будет 5 секунд, чтобы запустить другое приложение. Основная программа будет работать в фоновом режиме и сделает снимок экрана.

Чтобы проверить работу приложения, нужно запустить программу, нажать каждую кнопку, а затем с помощью программы File Explorer найти сохраненные файлы.

ВНИМАНИЕ

Нужно проявлять определенную осторожность при работе с методом Bitmap.Save. Дело в том, что в Windows Mobile 2003 и более ранних версиях операционных систем библиотека .NET Compact Framework не поддерживает сохранение графических файлов в форматах GIF, JPEG или PNG. Сохранять файлы можно только в формате BMP. Причем во время написания кода редактор не заметит ошибки и позволит запустить программу с неправильным вызовом метода. Однако при вызове метода возникнет исключение NotSupportedException. К счастью, в Windows Mobile 5.0 поддерживаются все четыре графических формата.

Метод Lockbits

В .NET Compact Framework 2.0 появилась ограниченная поддержка метода

LockBits
, при помощи которого можно манипулировать массивом пикселов изображения. Перечисление
ImageLockMode
в данном методе позволяет использовать значения
ReadWrite
,
ReadOnly
и
WriteOnly
. А перечисление
PixelFormat
поддерживает значения, перечисленные в следующем списке:

□ 

Format16bppRgb555
;

□ 

Format16bppRgb565
;

□ 

Format24bppRgb
;

□ 

Format32bppRgb
.

На сайте MSDN можно найти статью «How to: Use LockBits» с примером, в котором создается картинка и меняется интенсивность синих пикселов с помощью метода

LockBits
. В листинге 6.21 приведен пример, который для большей наглядности пришлось немного изменить.

Листинг 6.21

private Bitmap CreateBitmap(int width, int height) {

 Bitmap bmp = new Bitmap(@"\Windows\msn.gif");

 width = bmp.Size.Width;

 height = bmp.Size.Height;

 Graphics g = Graphics.FromImage(bmp);

 g.Dispose;

 return bmp;

}

protected override void OnPaint(PaintEventArgs e) {

 Bitmap bmp = CreateBitmap(100, 100);

 // Выводим картинку-оригинал

 e.Graphics.DrawImage(bmp, 0, 0);

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9