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

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

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

'----------------------------------------------------------------
'Размеры наших битовых образов и экранного изображения PictureBox
'----------------------------------------------------------------
Const bitmap_dx As Integer = 200
Const bitmap_dy As Integer = 100
'-------------------------------------------------
'Создает и прорисовывает изображение заднего плана
'-------------------------------------------------
Private m_backgroundBitmap As System.Drawing.Bitmap
Sub CreateBackground()
 If (m_backgroundBitmap Is Nothing) Then
  m_backgroundBitmap = New Bitmap(bitmap_dx, bitmap_dy)
 End If
 'Делаем битовую карту белой
 Dim gfx As System.Drawing.Graphics
 gfx = System.Drawing.Graphics.FromImage(m_backgrourdBitmap)
 gfx.Clear(System.Drawing.Color.White)
 'Рисуем текст черным
 Dim myBrush As System.Drawing.Brush
 myBrush = New System.Drawing.SolidBrush( _
  System.Drawing.Color.Black)
 Dim у As Integer
 For у = 0 To bitmap_dy Step 15
  gfx.DrawString("I am the BACKGROUND IMAGE...hello", Me.Font, myBrush, 0, y)
 Next
 'Очистить
 myBrush.Dispose()
 gfx.Dispose()
End Sub
'-------------------------------------------------
'Создает и прорисовывает изображение заднего плана
'-------------------------------------------------
Private m_foregroundBitmap As System.Drawing.Bitmap
Sub CreateForeground()
 If (m_foregroundBitmap Is Nothing) Then
  m_foregroundBitmap = New Bitmap(bitmap_dx, bitmap_dy)
 End If
 'Делаем всю битовую карту синей
 Dim gfx As System.Drawing.Graphics
 gfx = System.Drawing.Graphics.FromImage(m_foregroundBitmap)
 gfx.Clear(System.Drawing.Color.Blue)
 'Рисуем несколько фигур желтым
 Dim yellowBrush As System.Drawing.Brush
 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()
End Sub
'-----------------------------------------------------------------
'Устанавливает размеры и местоположение PictureBox с левой стороны
'-----------------------------------------------------------------
Private Sub SetPictureBoxDimensions()
 PictureBox1.Width = bitmap_dx
 PictureBox1.Height = bitmap_dy
 PictureBox1.Left = 20
End Sub
'---------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Отобразить изображение ЗАДНЕГО ПЛАНА в PictureBox
'---------------------------------------------------------------------
Private Sub buttonDrawBackground_Click(ByVal sender As Object, _
 ByVal e As System.EventArgs) Handles buttonDrawBackground.Click
 SetPictureBoxDimensions()
 CreateBackground()
 PictureBox1.Image = m_backgroundBitmap
End Sub
'-----------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Отобразить изображение ПЕРЕДНЕГО ПЛАНА в PictureBox
'-----------------------------------------------------------------------
Private Sub buttonDrawForeground_Click(ByVal sender As Object, _
 ByVal e As System.EventArgs) Handles buttonDrawForeground.Click
 SetPictureBoxDimensions()
 CreateForeground()
 PictureBox1.Image = m_foregroundBitmap
End Sub
'-----------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Наложить изображение ПЕРЕДНЕГО ПЛАНА на изображение
' ЗАДНЕГО ПЛАНА. Использовать МАСКУ ПРОЗРАЧНОСТИ, чтобы желтый
' цвет в изображении ПЕРЕДНЕГО ПЛАНА стал прозрачным и через
' него можно было видеть содержимое изображения
' ЗАДНЕГО ПЛАНА
'------------------------------------------------------------------------
Private Sub buttonDrawBackgroundPlusForeground_Click(ByVal _
 sender As Object, ByVal e As System.EventArgs) _
 Handles buttonDrawBackgroundPlusForeground.Click
 SetPictureBoxDimensions()
 CreateForeground()
 CreateBackground()
 'Получить объект Graphics изображения ЗАДНЕГО ПЛАНА, поскольку
 'именно поверх него мы собираемся рисовать.
 Dim gfx As System.Drawing.Graphics
 gfx = System.Drawing.Graphics.FromImage(m_backgroundBitmap)
 '-------------------------------------------------------
 'Создать класс ImageAttributes. Этот класс позволяет нам
 'задать прозрачный цвет на наших операций рисования
 '-------------------------------------------------------
 Dim trasparencyInfo As System.Drawing.Imaging.ImageAttributes
 trasparencyInfo = New System.Drawing.Imaging.ImageAttributes
 '----------------------
 'Задать прозрачный цвет
 '----------------------
 trasparencyInfo.SetColorKey(System.Drawing.Color.Yellow, _
  System.Drawing.Color.Yellow)
 'Задать прямоугольник рисунка
 Dim rect As System.Drawing.Rectangle = _
  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
End Sub

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


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