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

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

Листинг 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;
}

Оглавление книги


Генерация: 0.045. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз