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

Листинг 8.1. Применение отложенной загрузки, кэширования и освобождения графических ресурсов

Листинг 8.1. Применение отложенной загрузки, кэширования и освобождения графических ресурсов

Option Strict On
Public Class GraphicsGlobals
Private Shared s_Player_Bitmap1 As System.Drawing.Bitmap
Private Shared s_Player_Bitmap2 As System.Drawing.Bitmap
Private Shared s_Player_Bitmap3 As System.Drawing.Bitmap
Private Shared s_Player_Bitmap4 As System.Drawing.Bitmap
Private Shared s_colPlayerBitmaps As _
 System.Collections.ArrayList
'----------------------
'Освободить все ресурсы
'----------------------
Public Shared Sub g_PlayerBitmapsCollection_CleanUp()
 'Если не загружено ни одно изображение, то и память освобождать не от чего
 If (s_colPlayerBitmapsIs Nothing) Then Return
 'Дать указание каждому из этих объектов освободить
 'любые удерживаемые ими неуправляемые ресурсы
 s_Player_Bitmap1.Dispose()
 s_Player_Bitmap2.Dispose()
 s_Player_Bitmap3.Dispose()
 s_Player_Bitmap4.Dispose()
 'Обнулить каждую из этих переменных, чтобы им не соответствовали
 'никакие объекты в памяти
 s_Player_Bitmap1 = Nothing
 s_Player_Bitmap2 = Nothing
 s_Player_Bitmap3 = Nothing
 s_Player_Bitmap4 = Nothing
 'Избавиться от массива
 s_colPlayerBitmaps = Nothing
End Sub
'-----------------------------------------
'Функция: возвращает коллекцию изображений
'-----------------------------------------
Public Shared Function g_PlayerBitmapsCollection() _
 As System.Collections.ArrayList
 '---------------------------------------------------------------
 'Если изображения уже загружены, их достаточно только возвратить
 '---------------------------------------------------------------
 If Not (s_colPlayerBitmaps Is Nothing) Then
  Return scolPlayerBitmaps
 End If
 'Загрузить изображения как ресурсы из исполняемого двоичного файла
 Dim thisAssemblyAs System.Reflection.Assembly = _
  System.Reflection.Assembly.GetExecutingAssembly()
 Dim thisAssemblyNameAs System.Reflection.AssemblyName = _
  thisAssembly.GetName()
 Dim assemblyNameAs String = thisAssemblyName.Name
 'Загрузить изображения
 s_Player_Bitmap1 =New System.Drawing.Bitmap( _
  thisAssembly.GetManifestResourceStream(assemblyName _
  + ".Hank_RightRun1.bmp"))
 s_Player_Bitmap2 = New System.Drawing.Bitmap( _
  thisAssembly.GetManifestResourceStream(assemblyName _
  + ".Hank_RightRun2.bmp"))
 s_Player_Bitmap3 = New System.Drawing.Bitmap( _
  thisAssembly.GetManifestResourceStream(assemblyName _
  + ".Hank_LeftRun1.bmp"))
 s_Player_Bitmap4 = New System.Drawing.Bitmap( _
  thisAssembly.GetManifestResourceStream(assemblyName _
  + ".Hank_LeftRun2.bmp"))
 'Добавить изображения в коллекцию
 s_colPlayerBitmaps = New System.Collections.ArrayList
 s_colPlayerBitmaps.Add(s_Player_Bitmap1)
 s_colPlayerBitmaps.Add(s_Player_Bitmap2)
 s_colPlayerBitmaps.Add(s_Player_Bitmap3)
 s_colPlayerBitmaps.Add(s_Player_Bitmap4)
 'Возвратить коллекцию
 Return s_colPlayerBitmaps
End Function
Private Shared s_blackPen As System.Drawing.Pen
Private Shared s_whitePen As System.Drawing.Pen
Private Shared s_ImageAttribute As _
 System.Drawing.Imaging.ImageAttributes
Private Shared s_boldFont As System.Drawing.Font
'------------------------------------------------
'Вызывается для освобождения от любых графических
'ресурсов, которые могли быть кэшированы
'------------------------------------------------
Private Shared Sub g_CleanUpDrawingResources()
 'Освободить память от черного пера, если таковое имеется
 If Not (s_blackPenIs Nothing) Then
  s_blackPen.Dispose()
  s_blackPen = Nothing
 End If
 'Освободить память от белого пера, если таковое имеется
 If Not (s_whitePenIs Nothing) Then
  s_whitePen.Dispose()
  s_whitePen = Nothing
 End If
 'Освободить память от атрибута ImageAttribute, если таковой имеется.
 'Примечание. Метод Dispose() для этого типа не предусмотрен,
 'поскольку все его данные являются управляемыми
 If Not (s_ImageAttribute Is Nothing) Then
  s_ImageAttribute = Nothing
 End If
 'Освободить память от полужирного шрифта, если таковой имеется
 If Not (s_boldFontIs Nothing) Then
  b_boldFont.Dispose()
  s_boldFont = Nothing
 End If
End Sub
'-----------------------------------------
'Эта функция позволяет получить доступ
'к черному перу, находящемуся в кэш-памяти
'-----------------------------------------
Private Shared Function g_GetBlackPen() As System.Drawing.Pen
 'Если перо еще не существует, создать его
 If (s_blackPen Is Nothing) Then
  s_blackPen = New System.Drawing.Pen( _
   System.Drawing.Color.Black)
 End If
 'Возвратить черное перо
 Return s_blackPen
End Function
'----------------------------------------
'Эта функция позволяет получить доступ
'к белому перу, находящемуся в кэш-памяти
'----------------------------------------
Private Shared Function g_GetWhitePen() As System.Drawing.Pen
 'Если перо еще не существует, создать его
 If (s_whitePen Is Nothing) Then
  s_whitePen = New System.Drawing.Pen( _
   System.Drawing.Color.White)
 End If
 'Возвратить белое перо
 Return s_whitePen
End Function
'-----------------------------------------------
'Эта функция позволяет получить доступ
'к полужирному шрифту, находящемуся в кэш-памяти
'-----------------------------------------------
Private Shared Function g_GetBoldFont() As System.Drawing.Font
 'Если перо еще не существует, создать его
 If (s_boldFont Is Nothing) Then
  s_boldFont = New System.Drawing.Font( _
  System.Drawing.FontFamily.GenericSerif, 10, System.Drawing.FontStyle.Bold)
 End If
 'Возвратить полужирный шрифт
 Return s_boldFont
End Function
'-----------------------------------------------------
'Эта функция позволяет осуществлять доступ
'к находящемуся в кэш-памяти объекту imageAttributes,
'который мы используем для изображений с прозрачностью
'-----------------------------------------------------
Private Shared Function g_GetTransparencyImageAttribute() As _
 System.Drawing.Imaging.ImageAttributes
 'Если объект не существует, создать его
 If (s_ImageAttributeIs Nothing) Then
  'Создать атрибут изображения
  s_ImageAttribute = _
   New System.Drawing.Imaging.ImageAttributes
  s_ImageAttribute.SetColorKey(System.Drawing.Color.White, _
   System.Drawing.Color.White)
 End If
 'Возвратить его
 Return s_ImageAttribute
End Function
End Class

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

Оглавление статьи/книги
Похожие страницы

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