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

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

Жанры

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

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

Шрифт:

 // картинка-копия

 g.DrawImage(clone, 10, y);

 y += clone.Height + 10;

 // копия левой части картинки

 g.DrawImage(part, 10, y);

 y += part.Height + 10;

 g.Dispose;

}

private void button2_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics;

 Bitmap myBMP = new Bitmap(@"\windows\banner.gif");

 g.Clear(Color.White);

 int left = myBMP.Size.Width / 2; //
Копия картинки

 Bitmap clone = (Bitmap)myBMP.Clone;

 int y = 10;

 g.DrawImage(myBMP, 10, y);

 y += myBMP.Height + 10;

 g.DrawImage(clone, 10, y);

 y += clone.Height + 10;

 g.Dispose;

}

В этом примере создаются две перегруженные версии метода

CopyImage
. При помощи этого метода можно копировать картинку или ее часть. Для сравнения в примере было показано, как можно скопировать картинку с помощью метода
Clone
, доступного в .NET Compact Framework 2.0. Результат работы соответствующего приложения показан на рис. 6.4.

Рис. 6.4. Копирование картинки разными способами

Поддержка прозрачности

Библиотека .NET Compact Framework позволяет использовать прозрачный цвет, но при этом налагает определенные ограничения на эту возможность. Например, в библиотеке нет такого удобного метода, как

MakeTransparent
. Но разработчик может задать прозрачный цвет при помощи метода
SetColorKey
класса
ImageAttributes
. При этом разрешается использовать один и тот же цвет для минимального и максимального значений цветового ключа в версии метода
ImageAttributes.SetColorKey(Color.Color)
.

ПРИМЕЧАНИЕ

Вторая перегруженная версия метода ImageAttributes.SetColorKey(Color, Color, ColorAdjustType) в .NET Compact Framework не поддерживается.

Используя прозрачный цвет, можно добиться красивых результатов при наложении картинки на картинку. Этот механизм стоит продемонстрировать на конкретном примере.

Для тестового приложения были подготовлены две картинки. Первое изображение является фотографией моего кота, а во втором хранится небольшая табличка с его именем, сделанная за несколько секунд в стандартной программе Paint. При создании таблички фон был залит красным цветом, а для текстовой строки был выбран другой тон. Затем оба рисунка были добавлены в проект как ресурсы.

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

Основной код приложения приведен в листинге 6.18.

Листинг 6.18

private void butAddImage_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics;

 //
получим картинки из ресурсов

 Bitmap imgCat = new Bitmap(Assembly.GetExecutingAssembly.

GetManifestResourceStream("TransparentCS.mycat.jpg"));

 Bitmap imgName = new Bitmap(Assembly.GetExecutingAssembly.

GetManifestResourceStream("Transparent_CS.catname.bmp"));

 g.DrawImage(imgCat, 0, 0,

new Rectangle(0, 0, imgCat.Width, imgCat.Height), GraphicsUnit.Pixel);

 g.DrawImage(imgName, 50, 120,

new Rectangle(0, 0, imgName.Width.imgName.Height), GraphicsUnit.Pixel);

 g.Dispose;

}

private void butImage2_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics;

 // получим картинки из ресурсов

 Bitmap imgCat = new BitmapCAssembly.GetExecutingAssembly.

GetManifestResourceStream("Transparent_CS.mycat.jpg"));

 Bitmap imgName = new Bitmap(Assembly.GetExecutingAssembly.

GetManifestResourceStream("Transparent_CS.catname.bmp"));

 // Очистим экран

 g.Clear(Color.White);

 // Выводим первую картинку

 g.DrawImage(imgCat, 0, 0,

new Rectangle(0, 0, imgCat.Width, imgCat.Height), GraphicsUnit.Pixel);

 ImageAttributes attr = new ImageAttributes;

 // Устанавливаем красный цвет как прозрачный

 attr.SetColorKey(Color.Red, Color.Red);

 // Выводим вторую картинку с установленными атрибутами

 Rectangle dstRect = new Rectangle(50, 120, imgName.Width, imgName.Height);

 g.DrawImage(imgName, dstRect, 0, 0,

imgName.Width, imgName.Height, GraphicsUnit.Pixel.attr);

 g.Dispose;

}

ВНИМАНИЕ

He забудьте импортировать пространство имен System.Drawing.Imaging при работе с этим примером.

Если просто наложить одну картинку на другую, то результат будет, мягко говоря, не очень красивым (рис. 6.5).

Рис. 6.5. Неудачный вариант наложения двух картинок

Если же воспользоваться методом

SetColorKey
для установки прозрачного цвета, то результат наложения двух изображений будет выглядеть достойно (рис. 6.6).

Рис. 6.6. Наложение картинки с использованием прозрачности

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

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Эра Мангуста. Том 2

Третьяков Андрей
2. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра Мангуста. Том 2

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

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

Один на миллион. Трилогия

Земляной Андрей Борисович
Один на миллион
Фантастика:
боевая фантастика
8.95
рейтинг книги
Один на миллион. Трилогия

Помещицы из будущего

Порохня Анна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Помещицы из будущего

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Император

Рави Ивар
7. Прометей
Фантастика:
фэнтези
7.11
рейтинг книги
Император

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри