Библиотека .NET Compact Framework позволяет использовать прозрачный цвет, но при этом налагает определенные ограничения на эту возможность. Например, в библиотеке нет такого удобного метода, как
MakeTransparent
. Но разработчик может задать прозрачный цвет при помощи метода
SetColorKey
класса
ImageAttributes
. При этом разрешается
использовать один и тот же цвет для минимального и максимального значений цветового ключа в версии метода
ImageAttributes.SetColorKey(Color.Color)
.
ПРИМЕЧАНИЕ
Вторая перегруженная версия метода ImageAttributes.SetColorKey(Color, Color, ColorAdjustType) в .NET Compact Framework не поддерживается.
Используя прозрачный цвет, можно добиться красивых результатов при наложении картинки на картинку. Этот механизм стоит продемонстрировать на конкретном примере.
Для тестового приложения были подготовлены две картинки. Первое изображение является фотографией моего кота, а во втором хранится небольшая табличка с его именем, сделанная за несколько секунд в стандартной программе Paint. При создании таблички фон был залит красным цветом, а для текстовой строки был выбран другой тон. Затем оба рисунка были добавлены в проект как ресурсы.
Чтобы продемонстрировать рассматриваемый эффект, надо расположить на форме две кнопки. При нажатии первой кнопки табличка будет накладываться на фотографию без изменений. При нажатии на вторую кнопку красный цвет сначала будет определен как прозрачный и только потом произойдет наложение изображений.
He забудьте импортировать пространство имен System.Drawing.Imaging при работе с этим примером.
Если просто наложить одну картинку на другую, то результат будет, мягко говоря, не очень красивым (рис. 6.5).
Рис. 6.5. Неудачный вариант наложения двух картинок
Если же воспользоваться методом
SetColorKey
для установки прозрачного цвета, то результат наложения двух изображений будет выглядеть достойно (рис. 6.6).
Рис. 6.6. Наложение картинки с использованием прозрачности
Округленные прямоугольники
Так как .NET Compact Framework не позволяет создавать округленные прямоугольники встроенными средствами, то необходимо самостоятельно реализовать эту задачу. В этом разделе будет рассматриваться решение, предложенное Алексом Яхниным (Alex Yakhnin) в его блоге blog.opennetcf.org/ayakhnin/. Для достижения заданного эффекта надо нарисовать серию линий, которые соединяют эллипсы, и закрасить внутреннюю область сплошным цветом (рис. 6.7).
Рис. 6.7. Создание прямоугольника со скругленным углами
Соответствующий код приведен в листинге 6.19.
Листинг 6.19
public static void DrawRoundedRectangle(Graphics g, Pen p, Color backColor,