在Canvas上做一个众包项目 - 页 16

 
Реter Konow:

你在以下方面有点夸大其词。

...

要知道,重绘是重写数组中的值,如果你要重写1000000个值(窗口图像和位图中的像素的大致数量),那就不是 "千分之一秒",而是几秒钟。

我没有夸大其词,也会理解为什么。看看我的例子,在这个主题中,运动中的FPS大约是30-40 fps。框架,卡尔!

而每一帧的差别不是100个像素,而是70-80%的工作区域的差别。我并不是说随着屏幕分辨率的大小,这个FPS不会下降。它确实如此。在1980x1050的屏幕上,当把大的区域移动到12-17时。

而且是的。我到处都在使用缓存,并在寻找有过期缓存的区域时进行了一些优化(寻找脏的区域)。但这是一种常见的做法,不要以为你会让别人开眼界。

 
Igor Volodin:

我没有夸大其词,我将看到原因。看看我的例子,在这个主题中,运动中的FPS大约是30-40 fps。框架,卡尔!

而每一帧的差别不是100个像素,而是70-80%的工作区域的差别。我并不是说随着屏幕分辨率的大小,这个FPS不会下降。它确实如此。在1980x1050的屏幕上,当把大的区域移动到12-17时。

而且是的。我到处都在使用缓存,在寻找有过期缓存的区域时也做了一些优化(寻找脏区)。但这是一种常见的做法,不要以为你会让人开眼界。

在向ResoourceCreate()发送带有图像的数组后,你是否将数字掩码存储在内存中?

如果是这样,就很清楚为什么你没有滞后。我还没有实施它。也就是说,在我的实现中,图像掩码没有被保存。因此,要改变一个窗口的任何部分,我必须在一个数组中重新创建整个窗口。这就造成了一个瓶颈。

下一步是建立一个保存数字口罩的系统,并在特定领域高效工作。此后,元素对接口事件的响应将不会被减慢。

 
Реter Konow:

1. 所需时间越长(大约250毫秒至2秒)。

哇,什么数字。


全屏时不应该有任何滞后。

你在那里画什么?

---

如果你使用的是CCanvas--检查析构器--你可能没有做ResourceFree。

这是造成资源制动的主要原因。不断创造而不释放。

 
Реter Konow:

在向ResoourceCreate()发送图像阵列后,你是否将数字掩码存储在内存中?

"数字面具 "这个词是你自己想出来的吗?Yandex给了我虚拟现实头盔 )。是的,在数组中进行缓存。就个人而言,我花了很大力气来优化阿尔法通道选项,因为我想最大限度地利用它。很多东西都被 "手动 "混合像素以制作透明元素所吞噬。没有阿尔法通道的计算,界面的飞行速度甚至快了几倍。

 
Igor Volodin:

"数字面具 "这个词是你自己想出来的吗?Yandex给了我虚拟现实头盔 )。是的,在数组中进行缓存。就个人而言,我花了很大力气来优化阿尔法通道选项,因为我想最大限度地利用它。它在 "手动 "混合像素以制作透明元素方面吃了很多苦头。没有阿尔法通道的计算,界面的飞行速度甚至快了几倍。

是的,我自己想出了这个词,但如果你建议,我可以把它改成更方便的词。)

我的意思是,图像被转换为代表颜色的数字(已经计算了阿尔法通道),这些数字被存储在一个数组中。这个数组被发送到ResourceCreate(),图像被创建。

我没有尝试过优化阿尔法通道,但这是一个有趣的想法......我的所有对象都是在阿尔法通道计算后绘制的,所以有一个想法,就是让它可以改变界面窗口的透明度。在未来,我认为这可以实施。唯一碍事的是输入字段,它们是由 "正常 "对象创建的,因此不会改变透明度......。但这也是可以解决的。

我认为解决界面事件上的停滞问题,首先是将图像存储在数组中,并在其区域内确定方向。

 
o_O:

哇,好大的数字。


全屏时不应该有任何刹车。

你在那里画什么?

---

如果你使用的是CCanvas--检查析构器--你可能没有做ResourceFree。

这是资源放缓的主要原因。不断创造而不释放。

我一定会尝试ResourceFree(),但我认为这不是问题所在。 (我用控件绘制设置窗口。不幸的是,我没有使用Kanvas--不同的方法)。

问题是,如果我创建小的设置窗口,只有很少的复选框,从视觉上看,他们会立即做出反应,但是如果我创建更大的窗口(约700x500像素或更大),那么对界面事件的整体反应速度就会急剧下降。

分析这个问题,我得出的结论是,它是关于重新初始化数组,并在每个界面事件中重新计算所有像素的颜色。毕竟,该函数计算了大约700*500个值并初始化了数组。阵列初始化本身也需要时间。但如果你保存图像并只改变属于某个元素的像素颜色值,反应时间将取决于这个元素的面积...

在我看来,这就是问题所在。

 
Реter Konow:

分析这个问题,我得出的结论是,它是关于重新初始化数组,并在每个界面事件中重新计算所有像素的颜色。毕竟,该函数计算了大约700*500个值并初始化了数组。

显示代码。
 
o_O :
显示代码。
该代码块是一组直接负责创建窗口及其元素的数字“快照”的函数。

“Draw_element()”函数创建窗口图像的所有细节。首先,它创建一个图像数组(有点像普通的绘图画布)并在其上(以数字方式)绘制所有组件

要绘制每种类型的组件,需要调用一个特殊函数,用于绘制这种特定类型:“Draw_element_detail()”、“Set_text_on_element()”、“Create_gradient”、“Set_label_on_element()”:

我分几部分发送代码,因为编辑器不接受整体。

//--------------------------------------------------
void Нарисовать_элемент( int Окно, int Канвас, int смещение_по_x = 0 , int смещение_по_y = 0 )
{ //Alert(__FUNCTION__);
int Номер_рисуемого_полотна = G_CORE[Окно][Канвас][_DROWING_CANVAS],
     Имя_полотна    = G_CORE[Окно][Канвас][_NAME],
     //-----------------------------------------------------------------
     //Тип канваса может быть _STRIP или _LABEL.
     //-----------------------------------------------------------------
     Тип_канваса = G_CORE[Окно][Канвас][_BITMAP_TYPE],
     //-----------------------------------------------------------------
     //Канвас может представлять из себя готовую картинку.
     //В этом случае, индекс этой картинки будет прописан в свойствах канваса.
     //(например картинка ползунка слайдера - самостоятельный канвас).
     //-----------------------------------------------------------------
     Индекс_лейбла_канваса = G_CORE[Окно][Канвас][_OBJECTS_BITMAP_INDEX],
     //-----------------------------------------------------------------
     //Текущее состояние канваса. Берем из свойства _CURRENT_STATE.
     //-----------------------------------------------------------------
     Текущее_состояние_канваса = G_CORE[Окно][Канвас][_CURRENT_SCENE],
     //-----------------------------------------------------------------
    
     //-----------
     Состояние_детали,
     Индекс_лейбла,
     //------------------------------
     Высота_полотна      =   G_CORE[Окно][Канвас][_Y_SIZE],
     Ширина_полотна      =   G_CORE[Окно][Канвас][_X_SIZE],
     //------------------------------
     Массив_пикселей_полотна[],
     //------------------------------
     Размер_массива_пикселей_полотна = Высота_полотна * Ширина_полотна;  
     //----------------------------------------------------------    
//Alert("Имя_элемента  ",Имя_элемента,"  Окно  ",Окно,"  Объект  ",Объект);
   //------------------------------------------------------------
   int w;
//-------------------------------------------------------------
//Устанавливаем размеры массива основания элемента управления.
//Все детали этого элемента будут рисоваться на этом основании.
//Для прорисовки деталей элемента управления, будут вызываться
//функции (установать лейбл, установить текст и т.д...), и в каждую
//из них будет посылаться один и тот же массив пикселей элемента,
//размер которого мы сейчас устанавливаем. Детали будут рисоваться
//в том же массиве, уже поверх прежде нарисованных. На конечном этапе,
//будет вызываться функция "создать ресурс", и картинка элемента
//управления будет создана.
//-------------------------------------------------------------
ArrayResize (Массив_пикселей_полотна,Размер_массива_пикселей_полотна);
//-------------------------------------------------------------
//Создание основания самого элемента.  
//----------------------------------------------------------------------  
Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Канвас,Текущее_состояние_канваса);
//---------------------------------------
switch (Тип_канваса)
   {
     case _STRIP: Нарисовать_деталь_элемента(Окно,Канвас,Канвас,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна); break ;
     //-------------------------------------------------------------------------------------------------------------  
     case _LABEL:   if (Индекс_лейбла_канваса)
                    {
                     Установить_свойства_лейбла(Окно,Канвас,Индекс_лейбла_канваса,Текущее_состояние_канваса);
                     Установить_лейбл_на_Элемент(Окно,Канвас,Канвас,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Индекс_лейбла_канваса);
                    }
                                                                                                                                                                 break ;
     //-------------------------------------------------------------------------------------------------------------  
    
   }

//-------------------------------------------------------------
//Alert("Размер_массива_пикселей_элемента   ",Размер_массива_пикселей_элемента);
//-------------------------------------
//Установить_цвет_и_прозрачность_пикселей_изображения(Состояние_детали);
//--------------------------------------------------------------------------
//Делаем цикл по всем деталям элемента, и даже тем, которые находятся в списке
//объектов выше самого элемента. Поэтому цикл начинаем с начала списка объектов
//окна и идем в цикле до конца списка. Создаем все детали элемента, без относительно
//того, находятся ли они в последовательности или нет. При этом, обходим вторичное создание
//основания элемента с помощью условия.
//--------------------------------------------------------------------------
for ( int Деталь_полотна = 1 ; Деталь_полотна < 500 ; Деталь_полотна++)
   {
     if (!G_CORE[Окно][Деталь_полотна][_NAME]){ break ;}  
     //---------------------------------------
     int     Номер_полотна_которому_принадлежит_деталь   = G_CORE[Окно][Деталь_полотна][_DROWING_CANVAS];
     int     Тип_объекта_детали = G_CORE[Окно][Деталь_полотна][_OBJ_TYPE];
   // Alert("Деталь_полотна   ",Деталь_полотна,"   Номер_элемента_которому_принадлежит_деталь  ",Номер_элемента_которому_принадлежит_деталь);
     //---------------------------------------
     if (Номер_полотна_которому_принадлежит_деталь == Канвас && Деталь_полотна != Канвас && Тип_объекта_детали == Obj_Pixel)
     { //Alert("Окно  ",Окно,"  Канвас  ",Канвас,"  Деталь_полотна  ",Деталь_полотна," _GROUP_MAIN_OBJECT ",G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT],"  Номер_рисуемого_элемента  ",Номер_рисуемого_элемента);
       //---------------------------------------
       int     Тип_детали                       =   G_CORE[Окно][Деталь_полотна][_BITMAP_TYPE];
       int     Деталь_спрятана                  =   G_CORE[Окно][Деталь_полотна][_OBJECT_HIDE];
       int     Реализация_сценария              =   G_CORE[Окно][Деталь_полотна][_OBJECT_ACTIVATED];
       int     Гланый_элемент_детали            =   G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];        
       int     Состояние_элемента               =   G_CORE[Окно][Гланый_элемент_детали][_CURRENT_STATE];    
       //---------------------------------------
       int     Высота_элемента                  =   G_CORE[Окно][Гланый_элемент_детали][_Y_SIZE];  
       int     Ширина_элемента                  =   G_CORE[Окно][Гланый_элемент_детали][_X_SIZE];    
       //---------------------------------------
       if (!Реализация_сценария)
         {
           //----------------------------------------------------------------------
           //Определение текущего состояния объекта.
           //----------------------------------------------------------------------              
           if (!Состояние_элемента || (Состояние_элемента == _NEUTRAL_STATE || Состояние_элемента == _NEUTRAL_HIGHLIGHTED || Состояние_элемента == _NEUTRAL_BLOCKED))
            {
             if (!Состояние_элемента || Состояние_элемента == _NEUTRAL_STATE) Состояние_детали =  G_CORE[Окно][Деталь_полотна][_NEUTRAL_STATE];
             if (Состояние_элемента)Состояние_детали =  G_CORE[Окно][Деталь_полотна][Состояние_элемента];
             //-------------------------------
             Индекс_лейбла    =  G_CORE[Окно][Деталь_полотна][_OBJECTS_BITMAP_INDEX];
             w = 1 ;
            }
           //----------------------------------------------------------------------  
           if (!w && (Состояние_элемента == _ACTIVATED_STATE || Состояние_элемента == _ACTIVATED_HIGHLIGHTED || Состояние_элемента == _ACTIVATED_BLOCKED))
            {
             Состояние_детали =  G_CORE[Окно][Деталь_полотна][Состояние_элемента];
             Индекс_лейбла    =  G_CORE[Окно][Деталь_полотна][_ACTIVATED_LABEL];
            }
           //----------------------------------------------------------------------
          G_CORE[Окно][Деталь_полотна][_CURRENT_SCENE] = Состояние_детали;
          w = 0 ;
         }
       //---------------------------------------    
       if (Реализация_сценария)Состояние_детали = G_CORE[Окно][Деталь_полотна][_CURRENT_SCENE];
       //---------------------------------------    
       Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Деталь_полотна,Состояние_детали);
       //---------------------------------------
       if (!Деталь_спрятана)
         {
           switch (Тип_детали)  
            {
             case _STRIP:   Нарисовать_деталь_элемента(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна);                       break ;
             //-------------------------------------------------------------------------------------------------------------  
             case _LABEL:   if (Индекс_лейбла)
                             {
                              Установить_свойства_лейбла(Окно,Деталь_полотна,Индекс_лейбла,Состояние_детали);
                              Установить_лейбл_на_Элемент(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Индекс_лейбла);
                             }
                                                                                                                                                                 break ;
             //-------------------------------------------------------------------------------------------------------------  
             case _TEXT_:   Установить_текст_на_Элемент(Окно,Канвас,Деталь_полотна, Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Состояние_детали);     break ;    
             //-------------------------------------------------------------------------------------------------------------
             case _BASE : if (G_CORE[Окно][Деталь_полотна][_GRADIENT])Нарисовать_деталь_элемента(Окно,Канвас,Деталь_полотна,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ); break ;              
            }      
         }
      }  
   }
//--------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------    
//-------------------------------------------------------------------------------------------------------------    
//Cоздаем ресурс.
//-------------------------------------------------------------------------------------------------------------    
  Создать_ресурс(Имя_полотна,Массив_пикселей_полотна,Ширина_полотна,Высота_полотна);
//-------------------------------------------------------------------------------------------------------------  
//Устанавливаем координаты элемента.
//-------------------------------------------------------------------------------------------------------------  
     if (смещение_по_x != 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_XDISTANCE ,G_CORE[Окно][Канвас][_X] + смещение_по_x);
     if (смещение_по_y != 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_YDISTANCE ,G_CORE[Окно][Канвас][_Y] + смещение_по_y);  
     if (смещение_по_x == 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_XDISTANCE ,G_CORE[Окно][Канвас][_X]);
     if (смещение_по_y == 0 ) ObjectSetInteger ( 0 ,Имя_полотна, OBJPROP_YDISTANCE ,G_CORE[Окно][Канвас][_Y]);  
//-------------------------------------------------------------------------------------------------------------  

}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Нарисовать_деталь_элемента(
                                 int Окно,
                                 int Канвас,
                                 int Деталь_полотна,
                                 int &Массив_пикселей_полотна[],
                                 int Высота_полотна,
                                 int Ширина_полотна,
                                 int Нарисовать_только_градиент = 0
                               )
{
//--------------------------------------------------------------------------
int Высота_детали                 = G_CORE[Окно][Деталь_полотна][_Y_SIZE];
int Длинна_детали                 = G_CORE[Окно][Деталь_полотна][_X_SIZE];
int Отступ_X                      = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y                      = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
int Индекс_пикселя                = G_CORE[Окно][Деталь_полотна][_PIXEL_INDEX];
//--------------------------------------------------------------------------
int Градиент_рамки_детали         = G_CORE[Окно][Деталь_полотна][_GRADIENT];
//--------------------------------------------------------------------------
//Alert("Нарисовать_деталь_элемента - Основание:  Канвас   ",Канвас,"  Деталь_полотна  ",Деталь_полотна,"  [Деталь_полотна][_X]  ",G_CORE[Окно][Деталь_полотна][_X]);
int Номер_пикселя_элемента;
//--------------------------------------------------------------------------
//Цикл по площади основания всего элемента.
//--------------------------------------------------------------------------
if (!Нарисовать_только_градиент)
{
   for ( int Ряд = 0 ; Ряд < Высота_полотна; Ряд++)
   {
     for ( int Пиксель = 0 ; Пиксель < Ширина_полотна; Пиксель++)
      {
       if (
              Ряд >= Отступ_Y
           && Ряд < (Отступ_Y + Высота_детали)
           && Пиксель >= Отступ_X
           && Пиксель <(Отступ_X + Длинна_детали)
          )
          {
           Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB (Данные_пикселя[Индекс_пикселя][Цвет],Данные_пикселя[Индекс_пикселя][Непрозрачность]);
          }
        Номер_пикселя_элемента++;  
       }
    }
  }  
   //-----------------------------  
  Номер_пикселя_элемента = 0 ;
   //-----------------------------  
   if (Градиент_рамки_детали)
    {
     int V_раскладка = 0 ;
     int H_раскладка = 1 ;
     int Тип_градиента_рамки     = STANDART_GROUPS[Градиент_рамки_детали + 1 ];
     int Ширина_градиента_рамки  = STANDART_GROUPS[Градиент_рамки_детали + 2 ];
     int Начало_первой_рамки     =   0 ;
     //----------------------
     int Начало_второй_рамки     =  Ширина_градиента_рамки * 2 ;
     int Начало_третьей_рамки    =  Ширина_градиента_рамки * 4 ;
     int Начало_четвертой_рамки  =  Ширина_градиента_рамки * 6 ;
     int Нижний_блик = Начало_четвертой_рамки + Ширина_градиента_рамки * 2 ;
     int Верхний_блик = Нижний_блик + 2 ;
     //----------------------    
     switch (Тип_градиента_рамки)
       {
         case _4_SIDES_GRADIENT:
         //-----------------------
         //Прототип функции  
         //Создать_градиент(Раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента,Длинна_градиента,Отступ_X,Отступ_Y,Начало_градиента, Отступ_линии_от_края);
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
         //Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X  + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
         //-----------------------
         break ;
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         case _4_SIDES_GRADIENT_WITH_DOWN_RIGHT_BLICK:
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
         //Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X  + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
         //-----------------------
         //-----------------------
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ,Длинна_детали,Отступ_X,(Отступ_Y + Высота_детали),Нижний_блик, 0 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали, 1 ,(Отступ_X  + Длинна_детали + 1 ),Отступ_Y,Нижний_блик, 0 );
         break ;
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------        
         case _4_SIDES_GRADIENT_WITH_TOP_LEFT_BLICK:
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали,Отступ_X,Отступ_Y , Начало_первой_рамки, 1 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X,Отступ_Y,Начало_второй_рамки, 1 );
         //Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,4,Длинна_детали - 6,Отступ_X + 4,Отступ_Y + 15, Начало_второй_рамки, -1);
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали,Ширина_градиента_рамки,Отступ_X  + Длинна_детали - Ширина_градиента_рамки,Отступ_Y,Начало_третьей_рамки,- 1 );
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали - Ширина_градиента_рамки,Отступ_X + Ширина_градиента_рамки,(Отступ_Y + Высота_детали - Ширина_градиента_рамки),Начало_четвертой_рамки,- 1 );
         //-----------------------
         //-----------------------
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, 1 ,Длинна_детали + 2 ,Отступ_X,(Отступ_Y + Высота_детали),Нижний_блик, 0 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали + 1 , 1 ,(Отступ_X  + Длинна_детали + 1 ),Отступ_Y - 1 ,Нижний_блик, 0 );
         //-----------------------
         //-----------------------
         //-----------------------
        Создать_градиент(H_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна,Ширина_градиента_рамки,Длинна_детали + 4 ,Отступ_X - 2 ,Отступ_Y - 2 , Верхний_блик, 0 );
         //-----------------------
        Создать_градиент(V_раскладка,Градиент_рамки_детали,Массив_пикселей_полотна,Высота_полотна,Ширина_полотна, Высота_детали + 3 ,Ширина_градиента_рамки,Отступ_X - 2 ,Отступ_Y - 2 ,Верхний_блик, 0 );
         break ;
         //------------------------------------------------------------------------------------------------------------------------------------------------------------------
      
       }
    }
   //-----------------------------          
}
//--------------------------------------------------
 
//--------------------------------------------------
void Создать_градиент(
                      int Раскладка,
                      int Градиент_рамки_детали,
                      int &Массив_пикселей_полотна[],
                      int Высота_полотна,
                      int Ширина_полотна,
                      int Высота_градиента,
                      int Длинна_градиента,
                      int Отступ_X,
                      int Отступ_Y,
                      int Начало_градиента = 0,
                      int Отступ_линии_от_края = 0
                     )
{
int Номер_пикселя_элемента;
int Первый_пиксель           = Градиент_рамки_детали + 3 + Начало_градиента;
int V_раскладка = 0;
int H_раскладка = 1;

//--------------------------------------------------
int Ширина_градиента_рамки        = STANDART_GROUPS[Градиент_рамки_детали + 2];
//--------------------------------------------------
int Пиксели[],
     Альфы[],   q,
     Горизонтальная_полоса,
     Отступ_линии,
     Внутри_территории_рамки,
     Внутри_ширины_детали,
     колонка;            
//--------------------------------------------------
//Устанавливаем размеры массивов.
//--------------------------------------------------
ArrayResize(Пиксели,Ширина_градиента_рамки);
ArrayResize(Альфы,  Ширина_градиента_рамки);

if(Раскладка == V_раскладка && !Отступ_линии_от_края)Отступ_линии = Ширина_градиента_рамки;

//------------------------------------------------------------------------------  
//Инициализируем массивы цветами пикселей и значениями их непрозрачности.
//------------------------------------------------------------------------------
for(int a1 = 0; a1 <= Ширина_градиента_рамки * 2; a1 += 2)
   {
    Пиксели[q]   = STANDART_GROUPS[Первый_пиксель + a1];
    Альфы  [q]   = STANDART_GROUPS[Первый_пиксель + a1 + 1];
    q++;
   }
//--------------------------------------------------------------------------
//Цикл по площади всего окна.
//--------------------------------------------------------------------------
for(int _Ряд = 0; _Ряд < Высота_полотна; _Ряд++)
   {
    for(int _Пиксель_ряда = 0; _Пиксель_ряда < Ширина_полотна; _Пиксель_ряда++)
      {
       //----------------------------------------------------------
       //Фиксируем моменты цикла по площади рамок элемента.
       //----------------------------------------------------------
       //1. Находимся на территории верхней рамки.
       //(Между верхом и низом и между левой и правой сторонами верхней рамки.)
       //----------------------------------------------------------
       if(  
            _Ряд >= Отступ_Y && _Ряд < (Отступ_Y + Высота_градиента)
          &&(
               (Раскладка == H_раскладка  && _Пиксель_ряда >= Отступ_X + Отступ_линии && _Пиксель_ряда < (Отступ_X + Длинна_градиента) - Отступ_линии)
             ||(Раскладка == V_раскладка  && Отступ_линии_от_края >= 0 && _Пиксель_ряда >= Отступ_X && _Пиксель_ряда <= Отступ_X + Длинна_градиента - 1 && _Пиксель_ряда <= (Отступ_X + Отступ_линии))
             ||(Раскладка == V_раскладка  && Отступ_линии_от_края <  0 && _Пиксель_ряда >= Отступ_X + Отступ_линии_от_края *-1 && _Пиксель_ряда <= Отступ_X + Ширина_градиента_рамки  && _Пиксель_ряда >= Отступ_X  + Ширина_градиента_рамки + Отступ_линии)
            )
         )
         {
          //-----------------------------------
          Внутри_территории_рамки = 1;
          //-----------------------------------
          if(Раскладка == H_раскладка)Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Пиксели[Горизонтальная_полоса],Альфы[Горизонтальная_полоса]);
          if(Раскладка == V_раскладка)Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Пиксели[колонка],Альфы[колонка]);
          //-----------------------------------
        //  if( _Ряд == Отступ_Y + 20 && Раскладка == V_раскладка  && Отступ_линии_от_края >= 0 && _Пиксель_ряда >= Отступ_X                    && _Пиксель_ряда <= (Отступ_X + Отступ_линии))Alert(12345);
          колонка++;    
         }
       //-------------------------  
       Номер_пикселя_элемента++;  
       //-------------------------
      }
    //------------------------------------------------  
    if(Внутри_территории_рамки)
      {
       Горизонтальная_полоса++;
       колонка = 0;
       //---------------------------------------------------------------------------------
       //Счетчик "Отступ_линии" может иметь максимальное значение равное ширине градиента,
       //так как прибавляется только при спуске по линиям этого градиента на событии переключения ряда.
       //---------------------------------------------------------------------------------
       if(Раскладка == H_раскладка)Отступ_линии += Отступ_линии_от_края;
       //---------------------------------------------------------------------------------
       //
       //---------------------------------------------------------------------------------
       if(Раскладка == V_раскладка && _Ряд < Отступ_Y + Ширина_градиента_рамки)Отступ_линии += Отступ_линии_от_края;
       //---------------------------------------------------------------------------------
       if(Раскладка == V_раскладка && _Ряд >= Отступ_Y + Высота_градиента - Ширина_градиента_рамки - 1)Отступ_линии -= Отступ_линии_от_края;
       //---------------------------------------------------------------------------------
       if(Раскладка == V_раскладка && Отступ_линии_от_края < 0 && Отступ_линии > 0)Отступ_линии *=-1;
      }
    //------------------------------------------------
          
    //------------------------------------------------
   }
     //---------------------
    // Alert("Градиент_рамки_детали  ",Градиент_рамки_детали,"   Ширина_градиента_рамки   ",Ширина_градиента_рамки );
     //---------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_текст_на_Элемент(
                                 int       Окно,
                                 int       Канвас,
                                 int       Деталь_полотна,
                                 int      &Массив_пикселей[],
                                 int       Высота_массива,
                                 int       Длинна_массива,
                                 int       Состояние_детали
                                )
{
//--------------------
//int Головной_объект_группы = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];

string Текст  = CONTENT[G_CORE[Окно][Деталь_полотна][_TEXT]];
//--------------------
string    Шрифт           = FONT[STANDART_GROUPS[Состояние_детали + 5]];
int       Цвет_текста     = ColorToARGB(STANDART_GROUPS[Состояние_детали + 3],STANDART_GROUPS[Состояние_детали + 4]);
int       Размер_шрифта   = STANDART_GROUPS[Состояние_детали + 6];                                
int       Угол_наклона    = STANDART_GROUPS[Состояние_детали + 7];
int       Привязка_текста = STANDART_GROUPS[Состояние_детали + 8];
int       Стиль_шрифта    = STANDART_GROUPS[Состояние_детали + 9];
//--------------------
int       Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE;
//--------------------
int Отступ_X   = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y   = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
//--------------------------------------------------
//Alert("Нарисовать_деталь_элемента - Текст:  Канвас   ",Канвас,"  Деталь_полотна  ",Деталь_полотна,"  [Деталь_полотна][_X]  ",G_CORE[Окно][Деталь_полотна][_X],"  Канвас][_X]   ",G_CORE[Окно][Канвас][_X]);

TextSetFont(Шрифт,Размер_шрифта *-10,Стиль_шрифта,Угол_наклона);  
//--------------------------------------------------
if(!TextOut(Текст,Отступ_X,Отступ_Y,Привязка_текста,Массив_пикселей,Длинна_массива,Высота_массива,Цвет_текста,Формат_цвета))Alert(GetLastError());
//--------------------------------------------------
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_размеры_текста(int Окно, int Объект, int Главный_объект_в_элементе, int Состояние_детали)
{
int Массив_пикселей[];
int Самая_левая_точка = 1000000,
     Самая_правая_точка,
     Самая_верхняя_точка = 1000000,
     Самая_нижняя_точка,
     Номер_пикселя;
//--------------------
string Текст  = CONTENT[G_CORE[Окно][Объект][_TEXT]];
//--------------------
string    Шрифт           = FONT[STANDART_GROUPS[Состояние_детали + 5]];
int       Цвет_текста     = ColorToARGB(STANDART_GROUPS[Состояние_детали + 3],STANDART_GROUPS[Состояние_детали + 4]);
int       Размер_шрифта   = (int)(STANDART_GROUPS[Состояние_детали + 6]);                                
int       Угол_наклона    = STANDART_GROUPS[Состояние_детали + 7];
int       Привязка_текста = STANDART_GROUPS[Состояние_детали + 8];
int       Стиль_шрифта    = STANDART_GROUPS[Состояние_детали + 9];
int       Количество_букв_текста = StringLen(Текст);

//--------------------
int       Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE;
//--------------------
int Длинна_буквы  =   Размер_шрифта;
int Высота_буквы  =   Размер_шрифта;//Alert("Высота_буквы  ",Высота_буквы,"  Самая_нижняя_точка - Самая_верхняя_точка  ",Самая_нижняя_точка - Самая_верхняя_точка);
//--------------------
int Высота_массива = Высота_буквы * 2;
int Длинна_массива = Длинна_буквы * Количество_букв_текста * 2;
//--------------------
int Размер_массива = Высота_массива * Длинна_массива;
//--------------------
ArrayResize(Массив_пикселей,Размер_массива);//Alert("Размер_массива  ",Размер_массива);
//--------------------------------------------------
// Alert("Шрифт  ",Шрифт ,"  Высота_буквы  ",Высота_буквы,"  Размер_шрифта  ",Размер_шрифта,"  Угол_наклона  ",Угол_наклона);
TextSetFont(Шрифт,Размер_шрифта *-10,Стиль_шрифта,Угол_наклона);  
//--------------------------------------------------
if(!TextOut(Текст,0,0,Привязка_текста,Массив_пикселей,Длинна_массива,Высота_массива,Цвет_текста,Формат_цвета))Alert(GetLastError());
//--------------------------------------------------
for(int Ряд = 0; Ряд < Высота_массива; Ряд++)
   {
    for(int Колонка = 0; Колонка < Длинна_массива; Колонка++)
      {
       if(Массив_пикселей[Номер_пикселя] == Цвет_текста)
         {
          //----------------------------
          if(Самая_левая_точка >= Колонка) Самая_левая_точка = Колонка;
          //----------------------------
          if(Самая_правая_точка <= Колонка)Самая_правая_точка = Колонка;
          //----------------------------
         }
       //-------------------
       Номер_пикселя++;
      }  
   }
  //Alert("Самая_верхняя_точка  ",Самая_верхняя_точка,"  Самая_нижняя_точка  ",Самая_нижняя_точка,"  Самая_левая_точка  ",Самая_левая_точка,"  Самая_правая_точка  ",Самая_правая_точка);
//-----------------------------------------
int Длинна_текста = Самая_правая_точка - Самая_левая_точка;
//-----------------------------------------
//-----------------------------------------
G_CORE[Окно][Объект][_TEXT_X_SIZE] = Длинна_текста;
//-----------------------------------------
G_CORE[Окно][Главный_объект_в_элементе][_TEXT_X_SIZE] = Длинна_текста;
//-----------------------------------------
G_CORE[Окно][Объект][_X_SIZE] = Длинна_текста;
//--------------------------------------------------
Alert("Объект   ",Объект,"  Длинна_текста  ",Длинна_текста);
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_лейбл_на_Элемент(
                                 int       Окно,
                                 int       Канвас,
                                 int       Деталь_полотна,
                                 int      &Массив_пикселей_полотна[],
                                 int       Высота_элемента,
                                 int       Ширина_элемента,
                                 int       Индекс_лейбла,
                                // int       Цвет_фона,
                                // int       Непрозрачность_фона
                                )

{
//-----------------------
// Alert(__FUNCTION__);
int Цвет_пикселя,
     Непрозрачность_пикселя,
     Объект_привязки_лейбла                    =  G_CORE[Окно][Деталь_полотна][_LABEL_BACKGROUND_OBJECT],
     Состояние_объекта_привязки                =  G_CORE[Окно][Объект_привязки_лейбла][_CURRENT_SCENE],
     Номер_пикселя_объекта_привязки            =  G_CORE[Окно][Объект_привязки_лейбла][_PIXEL_INDEX],
     Поправка = Номер_пикселя_объекта_привязки * 2,
     //--------------------------------------------
     Цвет_фона           = STANDART_GROUPS[Состояние_объекта_привязки + 3 + Поправка],
     Непрозрачность_фона = STANDART_GROUPS[Состояние_объекта_привязки + 4 + Поправка];
     //--------------------------------------------
      // Alert("Цвет_фона   ",Цвет_фона,"   Непрозрачность_фона   ",Непрозрачность_фона,"   [_B2_PARAMETER]  ",G_CORE[Окно][Деталь_полотна][_B2_PARAMETER],"  Номер_пикселя_объекта_привязки  ",Номер_пикселя_объекта_привязки);  

//-------------------------    
// int Головной_объект_группы = G_CORE[Окно][Деталь_полотна][_GROUP_MAIN_OBJECT];
//--------------------
int Отступ_X   = G_CORE[Окно][Деталь_полотна][_X] - G_CORE[Окно][Канвас][_X];
int Отступ_Y   = G_CORE[Окно][Деталь_полотна][_Y] - G_CORE[Окно][Канвас][_Y];
//--------------------------------------------------

//-------------------------------------------------------------
int Номер_пикселя_элемента;
int Пиксель_лейбла = Номер_пикселя_лейбла;
//--------------------------------------------------------
for(int Ряд = 0; Ряд < Высота_элемента; Ряд++)
    {
     for(int Пиксель = 0; Пиксель < Ширина_элемента; Пиксель++)
       {
        //------------------------------
        if(Ряд >= Отступ_Y && Ряд < (Отступ_Y + Высота_лейбла))
          {
           if(Пиксель > (Отступ_X - 1) && Пиксель < (Отступ_X) + Ширина_лейбла)
             {
              if(Тип_лейбла == _RESOURCE_LABEL)
                {
                 //---------------------------
                 if(A_CORE_BASE[Пиксель_лейбла] == -1)
                   {
                    Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_фона,Непрозрачность_фона);
                   // Alert("Цвет_фона  ",Цвет_фона,"  Непрозрачность_фона  ",Непрозрачность_фона);
                   }
                 //---------------------------
                 else Массив_пикселей_полотна[Номер_пикселя_элемента] = A_CORE_BASE[Пиксель_лейбла];
                 //---------------------------
                }
              if(Тип_лейбла == _MY_LABEL)
                {
                 if(A_CORE_BASE[Пиксель_лейбла] == 0){Цвет_пикселя = Данные_пикселя[Пиксель_0][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_0][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 1){Цвет_пикселя = Данные_пикселя[Пиксель_1][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_1][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 2){Цвет_пикселя = Данные_пикселя[Пиксель_2][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_2][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 3){Цвет_пикселя = Данные_пикселя[Пиксель_3][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_3][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 4){Цвет_пикселя = Данные_пикселя[Пиксель_4][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_4][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 5){Цвет_пикселя = Данные_пикселя[Пиксель_5][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_5][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 6){Цвет_пикселя = Данные_пикселя[Пиксель_6][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_6][Непрозрачность];}
                 if(A_CORE_BASE[Пиксель_лейбла] == 7){Цвет_пикселя = Данные_пикселя[Пиксель_7][Цвет];Непрозрачность_пикселя = Данные_пикселя[Пиксель_7][Непрозрачность];}
                 //-----------------------------------------------
                 if(A_CORE_BASE[Пиксель_лейбла] == -1)
                   {
                    Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_фона,Непрозрачность_фона);
                   }
                 //-----------------------------------------------
                 else Массив_пикселей_полотна[Номер_пикселя_элемента] = ColorToARGB(Цвет_пикселя,Непрозрачность_пикселя);
                }/**/
              //---------------------------                    
              Пиксель_лейбла++;
              //---------------------------
             }
          }  
         //------------------------------
         Номер_пикселя_элемента++;  
       }
     }      
}
//--------------------------------------------------
//--------------------------------------------------
void Установить_свойства_лейбла(int Окно, int Объект, int Индекс_лейбла, int Состояние_детали)
{
//-------------------------------------------------------------
//Цикл по A_CORE_BASE[] и нахождение нужного лейбла по индексу.
//-------------------------------------------------------------
for(int a1 = 0; a1 < 250000; a1++)
   {
    if(A_CORE_BASE[a1] == _DATA_SEPARATOR && A_CORE_BASE[a1 + 1] == Индекс_лейбла)
      {
       //---------------------------------------------------
       //Инициализируем основные параметры лейбла.
       //---------------------------------------------------
       Ширина_лейбла                  = A_CORE_BASE[a1 + 2];
       G_CORE[Окно][Объект][_X_SIZE]  = Ширина_лейбла;
       //--------------
       Высота_лейбла                  = A_CORE_BASE[a1 + 3];
       G_CORE[Окно][Объект][_Y_SIZE]  = Высота_лейбла;
       //--------------
       Тип_лейбла                     = A_CORE_BASE[a1 + 4];
       //---------------------------------------------------
       //Утанавливаем размер массива изображения.
       //---------------------------------------------------
       //----------------------------------
       Номер_пикселя_лейбла          = a1 + 5;
       //----------------------------------
       if(Тип_лейбла == _MY_LABEL)
         {
          Установить_цвет_и_прозрачность_пикселей_изображения(Окно,Объект,Состояние_детали);
         }
       //----------------------------------  
       break;
      }
   }  

}
//--------------------------------------------------
void Создать_ресурс(string Наименование_ресурса, int &Массив_пикселей[],int Ширина_массива, int Высота_массива, int Формат_цвета = COLOR_FORMAT_ARGB_NORMALIZE)
{

  //-------------------------------------
  Имя_ресурса = "::"+"bitmap"+ Наименование_ресурса;
  //-------------------------------------
  ObjectCreate(0,Наименование_ресурса,OBJ_BITMAP_LABEL,0,0,0);
  ObjectSetString(0,Наименование_ресурса,OBJPROP_BMPFILE,Имя_ресурса);
//-------------------------------------
if(!ResourceCreate(Имя_ресурса,Массив_пикселей,Ширина_массива,Высота_массива,0,0,0,Формат_цвета))Alert("!ResourceCreate 2  Наименование_ресурса   ",Наименование_ресурса,"  Ошибка  ",GetLastError());
//-------------------------------------                    
}
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
void Установить_цвет_и_прозрачность_пикселей_изображения(int Окно, int Объект, int Состояние_детали)
{
//if(!G_CORE[Окно][Объект][_OBJECT_ACTIVATED])
// Alert(__FUNCTION__);
//----------------------------------------------------------
Данные_пикселя[Пиксель_0][Цвет]           = STANDART_GROUPS[Состояние_детали + 3];
Данные_пикселя[Пиксель_0][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 4];
//----------------------------------------------------------
Данные_пикселя[Пиксель_1][Цвет]           = STANDART_GROUPS[Состояние_детали + 5];
Данные_пикселя[Пиксель_1][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 6];
//----------------------------------------------------------
Данные_пикселя[Пиксель_2][Цвет]           = STANDART_GROUPS[Состояние_детали + 7];
Данные_пикселя[Пиксель_2][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 8];
//----------------------------------------------------------
Данные_пикселя[Пиксель_3][Цвет]           = STANDART_GROUPS[Состояние_детали + 9];
Данные_пикселя[Пиксель_3][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 10];
//----------------------------------------------------------
Данные_пикселя[Пиксель_4][Цвет]           = STANDART_GROUPS[Состояние_детали + 11];
Данные_пикселя[Пиксель_4][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 12];
//----------------------------------------------------------
Данные_пикселя[Пиксель_5][Цвет]           = STANDART_GROUPS[Состояние_детали + 13];
Данные_пикселя[Пиксель_5][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 14];
//----------------------------------------------------------
Данные_пикселя[Пиксель_6][Цвет]           = STANDART_GROUPS[Состояние_детали + 15];
Данные_пикселя[Пиксель_6][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 16];
//----------------------------------------------------------
Данные_пикселя[Пиксель_7][Цвет]           = STANDART_GROUPS[Состояние_детали + 17];
Данные_пикселя[Пиксель_7][Непрозрачность] = STANDART_GROUPS[Состояние_детали + 18];
//----------------------------------------------------------
 

Create_resource(string Resource_name

Resource_name - 它的变化频率是多少? 内存中有多少资源?