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

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

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

using system;
public class GraphicsGlobals {
 private static System.Drawing.Bitmap s_Player_Bitmap1;
 private static System.Drawing.Bitmap s_Player_Bitmap2;
 private static System.Drawing.Bitmap s_Player_Bitmap3;
 private static System.Drawing.Bitmap s_Player_Bitmap4;
 private static System.Collections.ArrayList s_colPlayerBitmaps;
 //------------------------------------------------------
 //Освободить все ресурсы
 //------------------------------------------------------
 public static void g_PlayerBitmapsCollection_CleanUp() {
  //Если не загружено ни одно изображение, то и память освобождать не от чего
  if (s_colPlayerBitmaps == null) {
   return;
  }
  //Дать указание каждому из этих объектов освободить
  //любые удерживаемые ими неуправляемые ресурсы
  s_Player_Bitmap1.Dispose();
  s_Player_Bitmap2.Dispose();
  s_Player_Bitmap3.Dispose();
  s_Player_Bitmap4.Dispose();
  //Обнулить каждую из этих переменных, чтобы им не соответствовали
  //никакие объекты в памяти
  s_Player_Bitmap1 = null;
  s_Player_Bitmap2 = null;
  s_Player_Bitmap3 = null;
  s_Player_Bitmap4 = null;
  //Избавиться от массива
  s_colPlayerBitmaps = null;
 }
 //Функция: возвращает коллекцию изображений
 public static System.Collections.ArrayList g_PlayerBitmapsCollection() {
  //---------------------------------------------------------------
  //Если изображения уже загружены, их достаточно только возвратить
  //---------------------------------------------------------------
  if (s_colPlayerBitmaps != null) {
   return s_colPlayerBitmaps;
  }
  //Загрузить изображения как ресурсы из исполняемого двоичного файла
  System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
  System.Reflection.AssemblyName thisAssemblyName = thisAssembly.GetName();
  string assemblyName = 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;
 }
 private static System.Drawing.Pen s_blackPen;
 private static System.Drawing.Pen s_whitePen;
 private static System.Drawing.Imaging.ImageAttributes s_ImageAttribute;
 private static System.Drawing.Font s_boldFont;
 //------------------------------------------------
 //Вызывается для освобождения от любых графических
 //ресурсов, которые могли быть кэшированы
 //------------------------------------------------
 private static void g_CleanUpDrawingResources() {
  //Освободить память от черного пера, если таковое имеется
  if (s_blackPen !=null) {
   s_blackPen.Dispose();
   s_blackPen = null;
  }
  // Освободить память от белого пера, если таковое имеется
  if (s_whitePen != null) {
   s_whitePen.Dispose();
   r_whitePen = null;
  }
  //Освободить память от атрибута ImageAttribute, если таковой имеется.
  //Примечание. Метод Dispose() для этого типа не предусмотрен,
  //поскольку все его данные являются управляемыми
  if (s_ImageAttribute != null) {
   s_ImageAttribute = null;
  }
  //Освободить память от полужирного шрифта, если таковой имеется
  if (s_boldFont != null) {
   s_boldFont.Dispose();
   s_boldFont = null;
  }
 }
 //-----------------------------------------
 //Эта функция позволяет получить доступ
 //к черному перу, находящемуся в кэш-памяти
 //-----------------------------------------
 private static System.Drawing.Pen g_GetBlackPen() {
  //Если перо еще не существует, создать его
  if (s_blackPen ==null) {
   s_blackPen = new System.Drawing.Pen(System.Drawing.Color.Black);
  }
  //Возвратить черное перо return s_blackPen;
 }
 //----------------------------------------
 //Эта функция позволяет получить доступ
 //к белому перу, находящемуся в кэш-памяти
 //----------------------------------------
 private static System.Drawing.Pen g_GetWhitePen() {
  //Если перо еще не существует, создать его
  if (s_whitePen == null) {
   s_whitePen = new System.Drawing.Pen(System.Drawing.Color.White);
  }
 //Возвратить белое перо return s_whitePen;
 }
 //-----------------------------------------------
 //Эта функция позволяет получить доступ
 //к полужирному шрифту, находящемуся в кэш-памяти
 //-----------------------------------------------
 private static System.Drawing.Font g_GetBoldFont() {
  //Если перо еще не существует, создать его
  if (s_boldFont ==null) {
   s_boldFont = new System.Drawing.Font(
    System.Drawing.FontFamily.GenericSerif, 10, System.Drawing.FontStyle.Bold);
  }
  //Возвратить полужирный шрифт
  return s_boldFont;
 }
 //------------------------------------------------------
 //Эта функция позволяет осуществлять доступ
 //к находящемуся в кэш-памяти объекту imageAttributes,
 // который мы используем для изображений с прозрачностью
 //------------------------------------------------------
 private static System.Drawing.Imaging.ImageAttributes g_GetTransparencyImageAttribute() {
  //Если объект не существует, создать его
  if (s_ImageAttribute == null) {
   //Создать атрибут изображения
   s_ImageAttribute = new System.Drawing.Imaging.ImageAttributes();
   s_ImageAttribute.SetColorKey(System.Drawing.Color.White, System.Drawing.Color.White);
  }
  //Возвратить его
 return s_ImageAttribute;
 }
} //Конец класса

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

Похожие страницы

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