Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 11.11. Три полезных способа кэширования графических ресурсов
Листинг 11.11. Три полезных способа кэширования графических ресурсов
using System;
using System.Drawing;
internal class GraphicsGlobals {
//==========================================================================
//Подход 1: Создать ресурс по требованию
// и кэшировать его для последующего использования.
//
//Внешний код получает доступ к общедоступным свойствам для их просмотра, но
//сами переменные остаются внутренними переменными класса
//==========================================================================
private static Pen s_bluePen;
public static Pen globalBluePen {
get {
//Если перо еще не было создано
if (s_bluePen == null) {
s_bluePen =new System.Drawing.Pen(System.Drawing.Color.Blue);
}
return s bluePen;
}
} //Конец свойства
//=========================================================
//Подход 2:
//Загрузить глобально и кэшировать все
//используемые объекты Pen, ImageAttribute, Font и Brush.
//
//Внешний код получает доступ ко всем общедоступным членам,
//так что никакие функции доступа не нужны.
//=========================================================
public static Pen g_blackPen;
public static Pen g_whitePen;
public static System.Drawing.Imaging.ImageAttributes g_ImageAttribute;
private static bool s_alreadyInitialized;
public static Font g_boldFont;
public static Font g_smallTextFont;
public static Brush g_greenBrush;
public static Brush g_yellowBrush;
public static Brush g_redBrush;
public static Brush g_blackBrush;
//==============================================================
//Эта функция должна быть вызвана до попыток доступа к любому из
//вышеперечисленных глобальных объектов
//==============================================================
public static void InitializeGlobals() {
if (s_alreadyInitialized == true) {
return;
}
g_blackPen = new System.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;
}
//=========================================================
//Подход 3: Возвратить массив связанных ресурсов.
// Кэшировать ресурсы локально, чтобы при многократных
// запросах не загружались (понапрасну) их дубликаты.
//=========================================================
private static Bitmap m_CaveMan_Bitmap1;
private static Bitmap m_CaveMan_Bitmap2;
private static Bitmap m_CaveMan_Bitmap3;
private static Bitmap m_CaveMan_Bitmap4;
private static System.Collections.ArrayList m_colCaveManBitmaps;
//--------------------------------------------------
//Создать и загрузить массив изображений для спрайта
//--------------------------------------------------
public static System.Collections.ArrayList g_CaveManPictureCollection() {
//Изображения загружаются лишь в том случае, если мы их еще не загрузили
if (m_CaveMan_Bitmap1 == null) {
//-----------------------------------------------------------------
//Загрузить изображения. Эти изображения хранятся в виде
//встроенных ресурсов в нашем двоичном приложении.
//
//Загрузка изображений из внешних файлов осуществляется аналогичным
//образом, но выполнить ее проще (нам достаточно лишь указать
//имя файла в конструкторе растровых изображений).
//------------------------------------------------------------------
//Получить ссылку на нашу двоичную сборку
System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
//Получить имя сборки
System.Reflection.AssemblyName thisAssemblyName = thisAssembly.GetName();
string assemblyName = thisAssemblyName.Name;
//Загрузить изображения в виде двоичных потоков из нашей сборки
m_CaveMan_Bitmap1 = new System.Drawing.Bitmap(
thisAssembly.GetManifestResourceStream(
assemblyName + ".Hank RightRunl.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_LeftRun1.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);
}
//Возвратить коллекцию
return m_colCaveManBitmaps;
}
} //Конец класса
- 9.4.1. Реализация графа в виде матрицы смежности
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Игровая индустрия
- Файлы *.GDB изнутри
- Увеличение глубины рекурсии процедур и триггеров
- Использование сервера Yaffil внутри процесса
- Дистрибутив
- 1.3.5. Методы и атрибуты
- Три способа кодирования звука
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 2. Домены и атрибуты
- 4. Виртуальные атрибуты