Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 11.11. Три полезных способа кэширования графических ресурсов
Листинг 11.11. Три полезных способа кэширования графических ресурсов
Imports System
Imports System.Drawing
Friend Class GraphicsGlobals
'=======================================================================
'Подход 1: Создать ресурс по требованию
' и кэшировать его для последующего использования.
'
'Внешний код получает доступ к общедоступным свойствам для их просмотра,
'но сами переменные остаются внутренними переменными класса
'=======================================================================
Private Shared s_bluePen As Pen
Public Shared ReadOnly Property globalBluePen() As Pen
Get
'Если перо еще не было создано
If (s_bluePen Is Nothing) Then
s_bluePen = New System.Drawing.Pen( _
System.Drawing.Color.Blue)
End If
Return s_bluePen
End Get
End Property
'========================================================
'Подход 2:
'Загрузить глобально и кэшировать все
'используемые объекты Pen, ImageAttribute, Font и Brush
'
'Внешний код получает доступ ко всем общедоступным членам,
'так что никакие функции доступа не нужны.
'=========================================================
Public Shared g_blackPen As Pen
Public Shared g_whitePen As Pen
Public Shared g_ImageAttribute As Imaging.ImageAttributes
Private Shared s_alreadyInitialized As Boolean
Public Shared g_boldFont As Font
Public Shared g_smallTextFont As Font
Public Shared g_greenBrush As Brush
Public Shared g_yellowBrush As Brush
Public Shared g_redBrush As Brush
Public Shared g_blackBrush As Brush
'==============================================================
'Эта функция должна быть вызвана до попыток доступа к любому из
'вышеперечисленных глобальных объектов
'==============================================================
Public Shared Sub InitializeGlobals()
If (s_alreadyInitialized = True) Then Return
g_blackPen = New Systera.Drawing.Pen(Color.Black)
g_whitePen = New System.Drawing.Pen(Color.White)
g_ImageAttribute = New _
System.Drawing.Imaging.ImageAttributes
g_ImageAttribute.SetColorKey(Color.White, Color.White)
g_boldFont = New Font(FontFamily.GenericSerif, _
10, FontStyle.Bold)
g_smallTextFont = New Font(FontFamily.GenericSansSerif, _
8, FontStyle.Regular)
g_blackBrush = New SolidBrush(System.Drawing.Color.Black)
g_greenBrush = New SolidBrush(System.Drawing.Color.LightGreen)
g_yellowBrush = New SolidBrush(System.Drawing.Color.Yellow)
g_redBrush = New SolidBrush(System.Drawing.Color.Red)
s_alreadyInitialized = True
End Sub
'====================================================
'Подход 3: Возвратить массив связанных ресурсов.
' Кэшировать ресурсы локально, чтобы при многократных
' запросах не загружались (напрасно) их дубликаты
'====================================================
Private Shared m_CaveMan_Bitmap1 As Bitmap
Private Shared m_CaveMan_Bitmap2 As Bitmap
Private Shared m_CaveMan_Bitmap3 As Bitmap
Private Shared m_CaveMan_Bitmap4 As Bitmap
Private Shared m_colCaveManBitmaps As _
System.Collections.ArrayList
'--------------------------------------------------
'Создать и загрузить массив изображений для спрайта
'--------------------------------------------------
Public Shared Function g_CaveManPictureCollection() As _
System.Collections.ArrayList
'Изображения загружаются лишь в том случае, если мы их еще не загрузили
If (m_CaveManBitmap1 Is Nothing) Then
'-----------------------------------------------------------------
'Загрузить изображения. Эти изображения хранятся в виде
'встроенных ресурсов в нашем двоичном приложении
'
'Загрузка изображений из внешних файлов осуществляется аналогичным
'образом, но выполнить ее проще (нам достаточно лишь указать
'имя файла в конструкторе растровых изображений).
'-----------------------------------------------------------------
'Получить ссылку на нашу двоичную сборку
dim thisAssembly as System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
'Получить имя сборки
Dim thisAssemblyName As System.Reflection.AssemblyName = _
thisAssembly.GetName()
Dim assemblyName As String = thisAssemblyName.Name
'Загрузить изображения в виде двоичных потоков из нашей сборки
m_CaveMan_Bitmap1 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_RightRun1.bmp"))
m_CaveMan_Bitmap2 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_RightRun2.bmp"))
m_CaveMan_Bitmap3 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_LeftRunl.bmp"))
m_CaveMan_Bitmap4 = New System.Drawing.Bitmap( _
thisAssembly.GetManifestResourceStream( _
assemblyName + ".Hank_LeftRun2.bmp"))
'Добавить их в коллекцию
m_colCaveManBitmaps = New System.Collections.ArrayList
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap1)
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap2)
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap3)
m_colCaveManBitmaps.Add(m_CaveMan_Bitmap4)
End If
'Возвратить коллекцию
Return m_colCaveManBitmaps
End Function
End Class
- Листинг 11.1. Заполнение данными и очистка от них элементов управления TreeView с использованием альтернативных стратегий
- Листинг 11.2. Динамическое заполнение данными элемента управления TreeView
- Листинг 11.3. Запуск обработчика событий при изменении содержимого элемента TextBox программным путем
- Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им
- Листинг 11.5. Вызов метода Update() элемента управления для отображения пояснительного текста, информирующего о ходе выполнения задачи
- Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
- Листинг 11.7. Создание объекта Graphics для формы
- Листинг 11.8. Подключение к функции Paint формы
- Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
- Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
- Листинг 11.11. Три полезных способа кэширования графических ресурсов
- 9.4.1. Реализация графа в виде матрицы смежности
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Игровая индустрия
- Файлы *.GDB изнутри
- Увеличение глубины рекурсии процедур и триггеров
- Использование сервера Yaffil внутри процесса
- Дистрибутив
- 1.3.5. Методы и атрибуты
- Три способа кодирования звука
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 2. Домены и атрибуты
- 4. Виртуальные атрибуты