Книга: Программирование мобильных устройств на платформе .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;
 }
} //Конец класса

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


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