ResourceReadImage

Fonksiyon, ResourceCreate() fonksiyonu ile oluşturulmuş veya derleme sırasında EX5 dosyasına kaydedilmiş grafiksel kaynaklardan veri alır.

bool  ResourceReadImage(
   const string      resource_name,       // okunacak grafiksel kaynak ismi
   uint&             data[],              // kaynaktan veri alacak dizi
   uint&             width,               // kaynaktaki görüntü genişliğini almak için
   uint&             height,              // kaynaktaki görüntü yüksekliğini almak için
   );

Parametreler

resource_name

[in]  Bir görüntü içeren grafiksel kaynağın ismi. Kendi kaynaklarına erşim sağlamak için, isim kısa biçimde kullanılır "::resourcename". Eğer derlenmiş bir EX5 dosyasından kaynak indiriyorsak, dosyanın tam ismi, MQL5 konumuna, dosyaya ve kaynak isimlerine göre belirlenmiş bir adresle kullanılmalıdır – "dosya_yolu\\dosyaismi.ex5::kaynakismi".

data[][]

[in]  Grafiksel kaynaktan veri almak için bir veya iki boyutlu dizi.

img_width

[out]  Grafiksel kaynak görüntüsünün piksel olarak genişliği.

img_height

[out]  Grafiksel kaynak görüntüsünün piksel olarak yüksekliği.

Dönüş değeri

Başarılı ise 'true', değilse 'false'. Hata hakkında bilgi almak için GetLastError() fonksiyonunu çağırın.

Not

Eğer data[] dizisi daha sonra bir grafiksel kaynak oluşturmak için kullanılacaksa, COLOR_FORMAT_ARGB_NORMALIZE veya COLOR_FORMAT_XRGB_NOALPHA renk biçimleri kullanılmalıdır.

Eğer data[] dizisi iki boyutluysa ve ikinci boyutu X (genişliği) grafiksel kaynağın büyüklüğünden küçükse, ResourceReadImage() fonksiyonu false değerine dönüş yapar ve okuma gerçekleşmez. Ama eğer kaynak mevcutsa gerçek görüntü büyüklüğü, genişlik ve yükseklik parametrelerine döndürülür. Bu, kaynaktan veri almak için başka bir denemeye izin verecektir.

Örnek:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- grafiksel kaynağın parametrelerini bildir
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- piksel dizisinin büyüklüğünü ayarla
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- piksel dizisini saydam bir renkle doldur ve buna dayalı bir grafiksel kaynak oluştur
   ArrayInitialize(rc_data,0x00FFFFFF);
   if(!ResourceCreate(rc_name,rc_data,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created recource array: ",rc_data.Size());
 
//--- oluşturulan grafiksel kaynağı kontrol et
//--- geçerli çubuğun zaman ve fiyat verilerini al
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- son tik fiyatının ve zamanının koordinatlarını kullanarak bir bitmap nesnesi oluştur
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- oluşturulan bitmap nesnesinin genişlik ve yüksekliğini grafiksel kaynağın genişlik ve yüksekliğine eşit olarak ayarla
//--- nesne çapa noktasını merkezine ayarla
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- önceden oluşturulmuş grafiksel kaynağı bitmap nesnesi için bir görüntü dosyası olarak belirt
//--- bu durumda, kullanılan grafiksel kaynağın adını belirtmek için adının önüne "::" eklememiz gerekir
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- DodgerBlue rengini 200 şeffaflık ile ayarla
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- grafiksel kaynağın tüm piksel dizisini ayarlanan renkle doldur
   ArrayInitialize(rc_data,clr);
//--- grafiksel kaynak verisini güncelle
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- grafiksel kaynak verisini okumadan önce üç saniye bekle
   Print("Wait 3 seconds before ResourceReadImage()");
   Sleep(3000);
//--- kaynaktaki görüntüyü yeni bir piksel dizisine oku
   uint rc_data_copy[];
   uint w=0,h=0;
   ResetLastError();
   if(!ResourceReadImage("::"+rc_name,rc_data_copy,w,h))
     {
      Print("ResourceReadImage() failed. Error code: ",GetLastError());
      return;
     }
 
//--- OrangeRed rengini 200 şeffaflık ile ayarla
   clr=ColorToARGB(clrOrangeRed,200);
//--- grafiksel kaynağın tüm piksel dizisini ayarlanan renkle doldur ve buna dayalı yeni bir grafiksel kaynak oluştur
   ArrayInitialize(rc_data_copy,clr);
   if(!ResourceCreate(rc_name+"Copy",rc_data_copy,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("New ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created new recource array: ",rc_data_copy.Size());
   
//--- son tik fiyatının ve zamanının koordinatlarını kullanarak bir grafiksel etiket nesnesi oluştur
   string obj_name2="BitmapLabel";
   if(!ObjectCreate(0,obj_name2,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- önceden alınan fiyat ve zamanı kullanarak ekran koordinatlarını al
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("New ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
//--- oluşturulan grafiksel etiket nesnesinin genişlik ve yüksekliğini grafiksel kaynağın genişlik ve yüksekliğine eşit olarak ayarla
//--- nesne çapa noktasını merkezine ayarla
   ObjectSetInteger(0,obj_name2,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name2,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name2,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,obj_name2,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,obj_name2,OBJPROP_YDISTANCE,y);
//--- kopyalanan grafiksel kaynağı grafiksel etiket nesnesi için bir görüntü dosyası olarak ayarla
//--- bu durumda, kullanılan grafiksel kaynağın adını belirtmek için adının önüne "::" eklememiz gerekir
   ObjectSetString(0,obj_name2,OBJPROP_BMPFILE,"::"+rc_name+"Copy");
   
//--- yeni grafiksel etiket nesnesinin rengini değiştir
   Print("Wait 3 seconds before changing color to GreenYellow");
   Sleep(3000);
//--- GreenYellow rengini 200 şeffaflık ile ayarla
   clr=ColorToARGB(clrGreenYellow,200);
//--- yeni grafiksel kaynağın tüm piksel dizisini ayarlanan renkle doldur
   ArrayInitialize(rc_data_copy,clr);
//--- grafiksel kaynak verisini güncelle
   Update(rc_name+"Copy",rc_data_copy,rc_width,rc_height,true);
   
//--- üç saniye bekle ve kaynakları ve her iki nesneyi sil
   Print("Wait 3 seconds before deleting both objects");
   Sleep(3000);
   Print("Deleting Resource and all Bitmap objects");
   ResourceFree("::"+rc_name);
   ResourceFree("::"+rc_name+"Copy");
   ObjectDelete(0,obj_name);
   ObjectDelete(0,obj_name2);
  }
//+------------------------------------------------------------------+
//| Grafiksel kaynak verisini güncelle                               |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- sıfır boyut iletilirse bırak
   if(width==0 || height==0)
      return;
//--- kaynak verisini güncelle ve grafiği yeniden çiz
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Ayrıca Bakınız

Kaynaklar, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE