Программирование КПК и смартфонов на .NET Compact Framework
Шрифт:
MakeMoreBlue(bmp);
// Рисуем модифицированную картинку ниже исходного изображения
e.Graphics.DrawImage(bmp, 0, 50);
bmp.Dispose;
}
private void MakeMoreBlue(Bitmap bmp) {
// Задаём формат данных о цвете для каждой точки изображения
PixelFormat pxf = PixelFormat.Format24bppRgb;
//
Блокируем изображение в памяти
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, pxf);
// Получаем адрес первой строки развертки
IntPtr ptr = bmpData.Scan;
// Массив, содержащий байты изображения
int numBytes = bmp.Width * bmp.Height * 3;
byte[] rgbValues = new byte[numBytes];
// Копируем значения RGB в массив
Marshal.Copy(ptr, rgbValues, 0, numBytes);
// Модифицируем изображение, устанавливая
// синий цвет для каждой точки в картинке
for (int counter = 0; counter < rgbValues.Length; counter += 6)
rgbValues[counter] = 255;
// Копируем значения RGB обратно в изображение
Marshal.Сору(rgbValues, 0, ptr, numBytes);
// Разблокируем биты в памяти
bmp.UnlockBits(bmpData);
}
После запуска приложения на экране будут показаны две копии картинки, причем нижнее изображение будет немного отличаться от верхнего насыщенностью цветов.
Графический редактор
Теперь, когда мы ознакомились с графическими методами, настало время написать простейший графический редактор с минимальными возможностями. В этом приложении можно будет рисовать при помощи стилуса линии, а также прямые цветные линии из трех цветов. Процесс рисования узоров на экране КПК при помощи стилуса гораздо больше похож на реальное рисование, чем рисование мышью в стандартных графических редакторах.
Весь код программы сводится к обработке событий мыши
MouseDown
, MouseMove
и MouseUp
. В принципе, приемы создания графических эффектов ничем не отличаются от соответствующих приемов, применяемых на обычных персональных компьютерах. Я взял два примера из своей книги «Занимательное программирование на Visual Basic .NET» и перенес код в проект с учетом синтаксиса языка С#, что иллюстрирует листинг 6.22. Листинг 6.22
private int x_md, y_md;
Pen myPen = new Pen(Color.LightBlue);
private bool bPaint;
Graphics g;
private Pen erasePen;
private Point ptsStart;
private Point ptsPrevious;
private Point ptsCurrent;
private void Form1_MouseDown(object sender, MouseEventArgs e) {
//
Начинаем рисование
bPaint = true;
if (mnuLines.Checked) {
ptsStart.X = e.X;
ptsStart.Y = e.Y;
ptsPrevious = ptsStart;
}
if (mnuPaint.Checked) {
// координаты стилуса при нажатии
x_md = e.X;
y_md = e.Y;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e) {
if (bPaint) {
if (mnuLines.Checked) {
ptsCurrent.X = e.X;
ptsCurrent.Y = e.Y;
g = CreateGraphics;
g.DrawLine(erasePen, ptsStart.X, ptsStart.Y, ptsPrevious.X, ptsPrevious.Y);
g.DrawLine(myPen. ptsStart.X, ptsStart.Y, ptsCurrent.X, ptsCurrent.Y);
ptsPrevious = ptsCurrent;
g.Dispose;
}
if (mnuPaint.Checked) {
g = CreateGraphics;
int x_mm = e.X;
int y_mm = e.Y;
g.DrawLine(myPen, x_md, y_md, x_mm, y_mm);
x_md = x_mm;
y_md = y_mm;
g.Dispose;
}
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e) {
bPaint = false;
}
private void mnuClear_Click(object sender, EventArgs e) {
g = CreateGraphics;
g.Clear(this.BackColor);
g.Dispose;
}
private void Form1_Load(object sender, EventArgs e) {
erasePen = new Pen(this.BackColor);
}
private void mnuPaint_Click(object sender, EventArgs e) {
Поделиться:
Популярные книги
Моя на одну ночь
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Черный Маг Императора 8
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Отбор для предателя
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга II
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Шаг в бездну
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Часовая битва
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Вечная Война. Книга II
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Часовой ключ
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Инвестиго, из медика в маги
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Кротовский, может, хватит?
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Драконий подарок
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Очешуеть! Я - жена дракона?!
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Идеальный мир для Лекаря 9
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00