KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework

Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Иво Салмре, "Программирование мобильных устройств на платформе .NET Compact Framework" бесплатно, без регистрации.
Перейти на страницу:

Выбор желтого цвета в качестве прозрачного был сделан совершенно произвольно. Точно так же в качестве прозрачного цвета можно было выбрать синий цвет и позволить скопироваться в изображении переднего плана всему, что имеет желтый цвет, а синий цвет трактовать как прозрачный. Кроме того, не сложно поменять местами битовые карты переднего и заднего планов, сделав желтые и синие прямоугольники и эллипсы задним планом, а черный и белый текст — передним; в этом случае нам потребовалось бы выбрать в качестве прозрачного черный или белый цвет, и, в зависимости от нашего решения, прозрачными были бы либо текст, либо его фон. Прозрачность — мощная штука, и ее можно с большим успехом применять в растровых изображениях самых различных видов.

Листинг 13.5. Код формы, демонстрирующий использование прозрачности

//----------------------------------------------------------------

//Размеры наших битовых образов и экранного изображения PictureBox

//----------------------------------------------------------------

const int bitmap_dx = 200;

const int bitmap_dy = 100;


//-------------------------------------------------

//Создает и прорисовывает изображение заднего плана

//-------------------------------------------------

System.Drawing.Bitmap m_backgroundBitmap;

void CreateBackground() {

 if  (m_backgroundBitmap == null) {

  m_backgroundBitmap =new Bitmap(bitmap_dx, bitmap_dy);

 }


 //Делаем битовую карту белой

 System.Drawing.Graphics gfx;

 gfx = System.Drawing.Graphics.FromImage(m_backgroundBitmap);

 gfx.Clear(System.Drawing.Color.White);


 //Рисуем текст черным

 System.Drawing.Brush myBrush;

 myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);

 for (int у = 0; у < bitmap_dy; у = у + 15) {

  gfx.DrawString("I am the BACKGROUND IMAGE...hello", this.Font, myBrush, 0, у);

 }


 //Очистить

 myBrush.Dispose();

 gfx.Dispose();

}


//-------------------------------------------------

//Создает и прорисовывает изображение заднего плана

//-------------------------------------------------

System.Drawing.Bitmap m_foregroundBitmap;

void CreateForeground() {

 if (m_foregroundBitmap == null) {

  m_foregroundBitmap = new Bitmap(bitmap_dx, bitmap_dy);

 }


 //Делаем всю битовую карту синей

 System.Drawing.Graphics gfx;

 gfx = System.Drawing.Graphics.FromImage(m_foregroundBitmap);

 gfx.Clear(System.Drawing.Color.Blue);


 //Рисуем несколько фигур желтым

 System.Drawing.Brush yellowBrush;

 yellowBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Yellow);

 gfx.FillEllipse(yellowBrush, 130, 4, 40, 70);

 gfx.FillRectangle(yellowBrush, 5, 20, 110, 30);

 gfx.FillEllipse(yellowBrush, 60, 75, 130, 20);


 //Очистить

 yellowBrush.Dispose();

 gfx.Dispose();

}


//-----------------------------------------------------------------

//Устанавливает размеры и местоположение PictureBox с левой стороны

//-----------------------------------------------------------------

private void SetPictureBoxDimensions() {

 pictureBox1.Width = bitmap_dx;

 pictureBox1.Height = bitmap_dy;

 pictureBox1.Left = 20;

}


//---------------------------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ: Отобразить изображение ЗАДНЕГО ПЛАНА в PictureBox

//---------------------------------------------------------------------

private void buttonDrawBackground_Click(object sender, System.EventArgs e) {

 SetPictureBoxDimensions();

 CreateBackground();

 pictureBox1.Image = m_backgroundBitmap;

}


//-----------------------------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ: Отобразить изображение ПЕРЕДНЕГО ПЛАНА в PictureBox

//-----------------------------------------------------------------------

private void buttonDrawForeground_Click(object sender, System.EventArgs e) {

 SetPictureBoxDimensions();

 CreateForeground();

 pictureBox1.Image = m_foregroundBitmap;

}


//-----------------------------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ: Наложить изображение ПЕРЕДНЕГО ПЛАНА на изображение

// ЗАДНЕГО ПЛАНА. Использовать МАСКУ ПРОЗРАЧНОСТИ, чтобы желтый

// цвет в изображении ПЕРЕДНЕГО ПЛАНА стал прозрачным и через

// него можно было видеть содержимое изображения

// ЗАДНЕГО ПЛАНА

//-----------------------------------------------------------------------

private void buttonDrawBackgroundPlusForeground_Click(object sender, System.EventArgs e) {

 SetPictureBoxDimensions();

 CreateForeground();

 CreateBackground();


 //Получить объект Graphics изображения ЗАДНЕГО ПЛАНА, поскольку

 //именно поверх него мы собираемся рисовать. System.Drawing.Graphics gfx;

 gfx = System.Drawing.Graphics.FromImage(m_backgroundBitmap);


 //-------------------------------------------------------

 //Создать класс ImageAttributes. Этот класс позволяет нам

 //задать прозрачный цвет на наших операций рисования

 //-------------------------------------------------------

 System.Drawing.Imaging.ImageAttributes trasparencyInfo = new System.Drawing.Imaging.ImageAttributes();


 //----------------------

 //Задать прозрачный цвет

 //----------------------

 trasparencyInfo.SetColorKey(System.Drawing.Color.Yellow, System.Drawing.Color.Yellow);


 //Задать прямоугольник рисунка

 System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, m_backgroundBitmap.Width, m_backgroundBitmap.Height);


 //-----------------------------------------------------------------------

 //Нарисовать изображение ПЕРЕДНЕГО ПЛАНА поверх изображения ЗАДНЕГО ПЛАНА

 //и использовать прозрачный цвет в ImageAttributes для создания окна

 //прозрачности, через которое виден задний план

 //-----------------------------------------------------------------------

 gfx.DrawImage(m_foregroundBitmap, rect, 0, 0, m_foregroundBitmap.Width,

  m_foregroundBitmap.Height, System.Drawing.GraphicsUnit.Pixel, trasparencyInfo);


 //Очистить

 gfx.Dispose();


 //Показать результат в виде растрового изображения

 pictureBox1.Image = m_backgroundBitmap;

}

Встраивание изображений в виде ресурсов приложений

Во многих приложениях растровые изображения используются для того, чтобы предоставить пользователям красочный интерфейс. Нестандартные кнопки с нарисованными поверх них изображениями, графические изображения, используемые в иллюстративной графике, логотипы и другие изображения заднего плана — все это улучшает визуальный облик мобильного приложения. Вместо того чтобы заново создавать сложные рисунки, в играх интенсивно используют заранее заготовленные изображения. Поэтому очень часто удобно иметь изображения, встроенные в двоичный код приложения. Далее эти изображения автоматически развертываются вместе с приложением; такая практика гораздо более надежна, чем работа с множеством файлов изображений наряду с файлом приложения. Встраивание изображений не сопровождается увеличением общего размера приложения по сравнению с использованием отдельных файлов; в обоих случаях мы имеем дело с бинарными потоками изображений, к которым ваше приложение получает доступ по мере необходимости.

Чтобы использовать двоичные ресурсы, встроенные в приложение, вам необходимо следующее:

1. Изображения должны быть скомпилированы и включены в состав вашего приложения. Это можно указать во время проектирования в среде разработки.

2- Ваше приложение должно знать, где найти ресурсы во время выполнения. Для обращения к двоичным ресурсам, встроенным в откомпилированные сборки .NET, используется синтаксис, аналогичный путям доступа к файлам, позволяющий указывать местоположение ресурсов в загруженных сборках вашего приложения во время выполнения.

Далее мы остановимся на обоих этих моментах.

Как встроить изображение в приложение

В Visual Studio .NET процесс включения двоичных ресурсов в приложение осуществляется сравнительно несложно:

1. Запустите Visual Studio .NET.

2. Создайте проект C# Smart Device Application.

3. Выберите в меню Project (Проект) команду Add Existing ltem (Добавить существующий элемент).

4. В открывшемся диалоговом окне Add Existing Item измените установку фильтра Files of Type (Тип файлов) на Image Files (Файлы изображений).

5. Найдите файл изображения, который вы хотите добавить, и выделите его. (Примечание. Я настоятельно рекомендую выбирать файлы размером менее 300 Кбайт, иначе вы будете создавать в своем приложении гигантские файлы изображений, которые по своим размерам, скорее всего, будут превышать само приложение; растровые изображения с чрезмерно большим разрешением могут приводить к нехватке памяти устройства при их загрузке во время выполнения.) В данном примере мы будем полагать, что загружается файл MyImage.PNG.

6. Перейдя в окно Visual Studio .NET Solution Explorer, выделите только что добавленный файл изображения (MyImage.PNG), щелкните на нем правой кнопкой мыши и выберите в открывшемся контекстном меню пункт Properties (Свойства).

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*