【MQL5】ResourceCreate関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク
  1. ResourceCreate関数の働き・役割
  2. ResourceCreate関数の引数について
    1. 第一書式(ファイルに基づいたリソース作成)
    2. 第二書式(画素の配列に基づいたリソース作成)
  3. ENUM_COLOR_FORMAT について
    1. COLOR_FORMAT_XRGB_NOALPHA
    2. COLOR_FORMAT_ARGB_RAW
    3. COLOR_FORMAT_ARGB_NORMALIZE
  4. ResourceCreate関数の戻り値について
  5. ResourceCreate関数を使う際の注意点
  6. ResourceCreate関数を使ったサンプルコード
  7. サンプルコード解説1:Update関数(オリジナル関数)
    1. 関数の引数
    2. 関数の処理内容
  8. サンプルコード解説2:OnStart関数部分その1
    1. リソース名と画像サイズの宣言
    2. ピクセルデータの総数計算
    3. エラーフラグのリセット
  9. サンプルコード解説3:OnStart関数部分その2
    1. ピクセル配列のサイズ設定
    2. ピクセル配列の初期化
      1. 補足:16進数値「0x00FFFFFF」の読み解き方
    3. グラフィックリソースの作成
  10. サンプルコード解説4:OnStart関数部分その3
    1. ピクセルデータ配列サイズの確認
    2. ティックデータの取得
  11. サンプルコード解説5:OnStart関数部分その4
    1. ビットマップオブジェクトの作成
    2. エラーハンドリングとGetLastError関数
  12. サンプルコード解説6:OnStart関数部分その5
    1. ビットマップオブジェクトの幅と高さを設定
    2. オブジェクトのアンカーポイントを設定
    3. グラフィックリソースをビットマップオブジェクトに設定
  13. サンプルコード解説7:OnStart関数部分その6
    1. DodgerBlue色と透明度を設定
    2. ピクセル配列を色で塗りつぶす
    3. グラフィックリソースの更新と再描画

ResourceCreate関数の働き・役割

ResourceCreate関数は、指定されたデータセットまたはファイルに基づいて画像リソースを作成するために使用されます。
※この文脈における「リソース」というのは、画像や音声など、プログラムで扱う外部データのことを指します。ResourceCreate関数は、画像ファイルを読み込んだり、配列からピクセル情報を指定して動的に画像を作成したりすることができます。

つまり、この関数は「プログラムが利用できるように画像や音声をリソースとして登録する」ための機能を持っています。作成したリソースは、後でチャートに表示したり、オブジェクトに関連付けたりすることができます。
この関数には2つの異なる書式があるオーバーロード関数で、ファイルからリソースを作成する場合と、ピクセル配列に基づいて動的にリソースを作成する場合があります。

ファイルに基づく場合、BMP形式の画像やWAV形式の音声ファイルをリソースとしてアップロードすることが可能です。ピクセル配列に基づく場合は、プログラム内で動的に生成された画像リソースを作成できます。

ResourceCreate関数は、主にチャート上でビジュアルを表現したいときに使用され、これによりグラフィックや画像を柔軟に操作することができます。

ResourceCreate関数の引数について

ResourceCreate関数には2つの異なる書式があります。それぞれの書式について詳しく説明します。

第一書式(ファイルに基づいたリソース作成)

bool  ResourceCreate(
  const string      resource_name,       // リソース名
  const string      path               // ファイルへの相対パス
  );
  • resource_name
    リソース名を指定します。このリソース名は他のリソース名と一意(1つしか存在しない)である必要があります。
  • path
    画像や音声ファイルの相対パス(現在のディレクトリを基準としたファイルの場所)を指定します。画像ファイルの場合は24ビットまたは32ビットのBMP形式が必要です。サウンドファイルの場合はWAV形式のみがサポートされます。

第二書式(画素の配列に基づいたリソース作成)

bool  ResourceCreate(
  const string      resource_name,      // リソース名
  const uint&       data[],              // 配列としてのデータセット
  uint             img_width,         // 画像リソースの幅
  uint             img_height,         // 画像リソースの高さ
  uint             data_xoffset,       // 画像の左上隅の水平右方向オフセット
  uint             data_yoffset,       // 画像の左上隅の鉛直オフセット
  uint             data_width,         // データセットに基づいた画像の全体の幅
  ENUM_COLOR_FORMAT color_format         // 色処理方法
  );
  • resource_name
    リソース名を指定します。これも他のリソース名と一意(1つしか存在しない)である必要があります。
  • data[]
    画像を構成するピクセルデータを格納した配列を指定します。1次元または2次元の配列を使用できます。
  • img_width
    作成する画像リソースの横幅をピクセル(デジタル画像を構成する最小の単位)単位で指定します。data_width値を超えることはできません。
  • img_height
    作成する画像リソースの高さをピクセル単位で指定します。
  • data_xoffset
    画像の左上隅から右方向への水平オフセットを指定します。このオフセットは、画像をどの位置に配置するかを決定します。
  • data_yoffset
    画像の左上隅から下方向への垂直オフセットを指定します。
  • data_width
    1次元配列の場合に使用し、データセット全体の横幅を指定します。data_widthが0の場合は、img_widthと同じとみなされます。2次元配列の場合、このパラメータは無視されます。
  • color_format
    色のフォーマットを指定します。ENUM_COLOR_FORMAT列挙型から、画像の色処理方法を選択します。

ENUM_COLOR_FORMAT について

ResourceCreate関数では、色の処理方法を指定するためにENUM_COLOR_FORMAT列挙型を使用します。この列挙型では、リソースの色データがどのように扱われるかを指定することができます。

COLOR_FORMAT_XRGB_NOALPHA

この識別子を使用すると、アルファチャンネル(透明度を表す成分)が無視されます。画像の色成分のみが考慮され、透明度の設定は反映されません。主に、不透明な画像を扱う際に使用されます。

COLOR_FORMAT_ARGB_RAW

この識別子は、色成分が端末によって処理されないことを意味します。ユーザーが提供する色データはそのまま使用されるため、正確な設定が必要です。特定のピクセル(デジタル画像を構成する最小の単位)を直接制御する場合や、カスタム処理が必要な場合に使用されます。

COLOR_FORMAT_ARGB_NORMALIZE

この識別子を選択すると、端末側で色成分が処理されます。色の値が自動的に正規化され、システムに適した形で扱われるため、一般的な画像処理や通常の使用時にはこのオプションが推奨されます。

ResourceCreate関数の戻り値について

ResourceCreate関数は、リソースの作成に成功した場合に「true」を返し、失敗した場合には「false」を返します。作成の成否は、ファイルやピクセルデータの正当性、リソース名の重複、ファイル形式の適合性などによって決まります。

関数が失敗した場合、GetLastError関数を使用することで詳細なエラー情報を取得することができます。主なエラーコードとしては以下のものがあります。

  • 4015 – ERR_RESOURCE_NAME_DUPLICATED
    同じ名前の動的リソースや静的リソースが既に存在する場合に発生します。
  • 4016 – ERR_RESOURCE_NOT_FOUND
    指定されたファイルパスが正しくないか、ファイルが存在しない場合に発生します。
  • 4017 – ERR_RESOURCE_UNSUPPORTED_TYPE
    対応していないリソース形式(BMPまたはWAV以外の形式)でファイルを指定した場合に発生します。
  • 4018 – ERR_RESOURCE_NAME_IS_TOO_LONG
    指定されたリソース名が長すぎる場合に発生します。リソース名には適切な長さを使用する必要があります。

ResourceCreate関数を使う際の注意点

リソース名は一意(1つしか存在しない)である必要があります。すでに同じ名前のリソースが存在する場合、新しいリソースは作成されず、既存のリソースが更新される可能性があります。

ファイルに基づくリソースを作成する際には、指定するファイルの形式が正しいことを確認する必要があります。画像は24ビットまたは32ビットのBMP形式でなければならず、音声ファイルはWAV形式のみがサポートされています。ファイル形式が適切でない場合、リソース作成に失敗しエラーが発生します。

リソースサイズの制限にも注意が必要です。作成するリソースのサイズは、16MBを超えてはいけません。この制限を超えたリソースを作成しようとすると、関数が失敗します。

ピクセル配列に基づくリソース作成時には、配列のサイズやオフセット値に注意する必要があります。指定した幅や高さ、オフセット値が正確でないと、リソースが正しく表示されない可能性があります。ENUM_COLOR_FORMATで指定する色処理方法がリソースの表示に影響を与えるため、適切なフォーマットを選ぶことが重要です。

ResourceCreate関数を使ったサンプルコード

//+------------------------------------------------------------------+
//| グラフィックリソースデータを更新する関数                                 |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
 {
  //--- 幅または高さが0の場合は処理を終了する
  if(width==0 || height==0)
    return;
  //--- グラフィックリソースを更新し、再描画フラグが有効であればチャートを再描画する
  if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
    ChartRedraw(); // チャートを再描画する
 }
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
  //--- グラフィックリソースのパラメータを宣言する
  string rc_name="Resource"; // リソース名を指定
  uint   rc_width=100;       // 画像の幅を指定
  uint   rc_height=100;      // 画像の高さを指定
  uint   rc_data[];          // ピクセルデータを格納する配列
  uint   rc_size=rc_width*rc_height; // ピクセルデータの総数を計算

  //--- エラーフラグをリセットする
  ResetLastError();
  
  //--- ピクセル配列のサイズを設定する
  if(ArrayResize(rc_data,rc_size)!=rc_size) // 配列のサイズ変更に失敗した場合
    {
    // エラーメッセージをエキスパートログに出力
    Print("ArrayResize() failed. Error code: ",GetLastError());
    return;
    }

  //--- ピクセル配列を透明色(白色)で初期化し、それに基づいてリソースを作成する
  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());
 
  //--- 作成されたグラフィックリソースを確認する
  //--- 現在のティックデータ(足の時間と価格)を取得する
  MqlTick tick={}; // ティックデータを格納するための構造体を宣言
  if(!SymbolInfoTick(Symbol(),tick)) // ティック情報の取得に失敗した場合
    {
    // エラーメッセージをエキスパートログに出力
    Print("SymbolInfoTick() failed. Error code: ",GetLastError());
    return;
    }
  
  //--- 最後のティック価格と時刻の座標を使用してビットマップオブジェクトを作成する
  string obj_name="Bitmap"; // ビットマップオブジェクトの名前を指定
  if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid)) // ビットマップオブジェクトの作成に失敗した場合
    {
    // エラーメッセージをエキスパートログに出力
    Print("ObjectCreate() failed. Error code: ",GetLastError());
    return;
    }

  //--- ビットマップオブジェクトの幅と高さを設定する
  ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);  // 幅を設定
  ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height); // 高さを設定
  
  //--- オブジェクトのアンカーポイントをその中心に設定する
  ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER); // オブジェクトのアンカーを中心に設定

  //--- 作成されたグラフィックリソースをビットマップオブジェクトに設定する
  //--- リソース名の前に「::」を付けて指定
  ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name); // グラフィックリソースをオブジェクトに関連付け

  //--- 透明度200のDodgerBlue色を設定する
  uint clr=ColorToARGB(clrDodgerBlue,200); // カラーをARGB形式で設定(DodgerBlue色、透明度200)
  
  //--- ピクセル配列全体を設定した色で塗りつぶす
  ArrayInitialize(rc_data,clr); // ピクセル配列を指定した色で初期化

  //--- グラフィックリソースデータを更新し、チャートを再描画する
  Update(rc_name,rc_data,rc_width,rc_height,true); // リソース更新と再描画
 }

サンプルコード解説1:Update関数(オリジナル関数)

//+------------------------------------------------------------------+
//| グラフィックリソースデータを更新する関数                                 |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
 {
  //--- 幅または高さが0の場合は処理を終了する
  if(width==0 || height==0)
    return;
  //--- グラフィックリソースを更新し、再描画フラグが有効であればチャートを再描画する
  if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
    ChartRedraw(); // チャートを再描画する
 }

このUpdate関数は、グラフィックリソースのデータを更新し、必要に応じてチャートを再描画するためのオリジナル関数です。以下にこの関数の各部分を解説します。

関数の引数

  • res_name
    更新するグラフィックリソースの名前を指定します。この名前に基づいて既存のリソースを更新します。
  • pixel_data[]
    画像として使用するピクセルデータが格納された配列です。この配列の内容に基づいてリソースが更新されます。
  • width
    更新する画像リソースの横幅(ピクセル単位)を指定します。
  • height
    更新する画像リソースの縦幅(ピクセル単位)を指定します。
  • redraw
    trueの場合、リソースが更新された後にチャートを再描画します。falseの場合、再描画は行われません。

関数の処理内容

  1. 幅と高さの確認
    関数冒頭では、指定された幅や高さが0であるかどうかを確認します。幅または高さが0の場合、処理を終了します。これは、無効なリソースサイズでの更新を防ぐためです。
  2. ResourceCreate関数を使用してリソースを更新
    リソース名とピクセルデータを使って、ResourceCreate関数が呼び出されます。ここで指定されたピクセルデータと寸法に基づいて、グラフィックリソースが作成または更新されます。
  3. redrawフラグがtrueの場合はチャートを再描画
    ResourceCreate関数の実行が成功し、かつredrawフラグがtrueである場合、ChartRedraw関数を使用してチャートを再描画します。これにより、更新されたリソースがチャート上に反映されます。

このUpdate関数は、リソースを動的に更新するための簡潔な関数です。幅や高さのチェックを行い、無効なリソースの更新を防ぐことができます。また、redrawフラグによって、リソースの更新と同時にチャートを再描画するかどうかを制御できます。

サンプルコード解説2:OnStart関数部分その1

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
  //--- グラフィックリソースのパラメータを宣言する
  string rc_name="Resource"; // リソース名を指定
  uint   rc_width=100;       // 画像の幅を指定
  uint   rc_height=100;      // 画像の高さを指定
  uint   rc_data[];          // ピクセルデータを格納する配列
  uint   rc_size=rc_width*rc_height; // ピクセルデータの総数を計算

  //--- エラーフラグをリセットする
  ResetLastError();

OnStart関数は、スクリプトが実行されたときに最初に呼び出され、グラフィックリソースを作成するための準備が行われます。ここでは、使用されている変数関数について解説します。

リソース名と画像サイズの宣言

まず、以下の変数が宣言されています。

  • rc_name
    この変数は、グラフィックリソースの名前を表します。リソースは「Resource」という名前で作成され、この名前を使って後でリソースを操作することができます。リソース名は他のリソースと重複しないように、一意(1つしか存在しない)の名前にする必要があります。
  • rc_width
    この変数は、画像リソースの横幅(ピクセル単位)を指定しています。この例では100ピクセルに設定されています。ピクセルはデジタル画像を構成する最小の単位であり、画像の幅がこの値で決まります。
  • rc_height
    この変数は、画像リソースの縦幅(ピクセル単位)を指定しています。横幅と同様に、ここでは100ピクセルに設定されており、画像の高さが決まります。
  • rc_data
    この変数は、画像の各ピクセルの色情報を格納する配列です。画像を構成するためには、すべてのピクセルに対して色のデータが必要で、この配列にその情報が入ります。

ピクセルデータの総数計算

  • rc_size
    この変数は、画像全体を構成するピクセルの総数を計算して格納しています。計算方法は、画像の幅と高さを掛け合わせることで得られます。例えば、幅100ピクセル、高さ100ピクセルの画像なら、合計で10,000ピクセル分のデータが必要になります。この値が、後でピクセル配列のサイズ設定に使用されます。

エラーフラグのリセット

  • ResetLastError
    ResetLastError関数は、エラーフラグをリセットするために使用されます。スクリプトが実行される際に、以前のエラー情報をクリアし、新たにエラーが発生した場合にそれを正しく検出できるようにします。リソース作成中にエラーが発生したとき、後からGetLastError関数でエラー情報を取得するため、まずこの関数を使ってエラーフラグをクリアしておくことが重要です。

OnStart関数のこの部分では、以下のようにリソース作成のための基本的な設定が行われています。

このように、グラフィックリソースを作成するための準備が整うことで、後の処理で実際にリソースを作成し表示する準備ができるようになります。

サンプルコード解説3:OnStart関数部分その2

  ResetLastError();
  
  //--- ピクセル配列のサイズを設定する
  if(ArrayResize(rc_data,rc_size)!=rc_size) // 配列のサイズ変更に失敗した場合
    {
    // エラーメッセージをエキスパートログに出力
    Print("ArrayResize() failed. Error code: ",GetLastError());
    return;
    }

  //--- ピクセル配列を透明色(白色)で初期化し、それに基づいてリソースを作成する
  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;
    }

この部分では、ピクセルデータの配列を初期化し、そのデータを基にしてグラフィックリソースを作成しています。以下に各処理について詳しく解説します。

ピクセル配列のサイズ設定

最初に、ピクセルデータを格納する配列のサイズを設定しています。

  • ArrayResize関数
    ArrayResize関数は、指定されたサイズに基づいて配列のサイズを変更します。ここでは、前の部分で計算したピクセルの総数(rc_size)を使用して、ピクセルデータ配列(rc_data)のサイズを設定しています。
    もしサイズ変更が失敗した場合、関数はfalseを返し、その後、エラーコードを取得してエラーメッセージをエキスパートログに出力します。そして、処理を終了します。この処理によって、配列のサイズが正常に変更されたかどうかを確認し、エラーがあれば適切に処理できるようにしています。

ピクセル配列の初期化

次に、配列を初期化して透明色(白色)で塗りつぶしています。

ArrayInitialize関数
ArrayInitialize関数は、指定した値で配列全体を初期化します。ここでは、透明色(白色)を表す16進数値「0x00FFFFFF」を使用しています。この値は、完全に透明な白色を意味します。ピクセルごとにこの値が設定されるため、初期状態では画像が透明色で塗りつぶされます。

補足:16進数値「0x00FFFFFF」の読み解き方

「0x00FFFFFF」は16進数で表現された色の値です。16進数は、0から9とAからFまでの16種類の数字を使って数値を表現します。この特定の値は、色の情報を以下のように表しています。

  • 0x
    16進数であることを示すプレフィックス(前につける記号)です。
  • 00
    透明度(アルファチャンネル)の部分です。この「00」は、完全に透明であることを意味します。透明度の値は、00(完全透明)からFF(不透明)までの範囲です。
  • FFFFFF
    これは、赤、緑、青(RGB)それぞれの色成分を表します。FFFFFFは、赤(FF)、緑(FF)、青(FF)の最大値を意味し、結果として白色を表します。RGBの各成分は00(最小値)からFF(最大値)までの範囲で指定できます。

したがって、「0x00FFFFFF」は「完全に透明な白色」という意味になります。このように、アルファチャンネルとRGBの色成分を組み合わせて、色と透明度を16進数で表現します。

グラフィックリソースの作成

初期化されたピクセル配列を基にして、グラフィックリソースを作成します。

リソースの作成に失敗した場合、エラーメッセージをエキスパートログに出力し、処理を終了します。エラーが発生する可能性がある理由としては、リソース名が重複している、配列データが無効、リソースサイズが適切でないなどが考えられます。

この段階で、リソースが正常に作成されれば、その後の処理でグラフィックがチャート上に表示されます。リソース作成が成功すれば、ピクセルデータが反映された画像がリソースとして使用できる状態になります。

サンプルコード解説4:OnStart関数部分その3

  //--- 作成されたピクセルデータの配列サイズを確認
  Print("Size of created recource array: ",rc_data.Size());
 
  //--- 作成されたグラフィックリソースを確認する
  //--- 現在のティックデータ(足の時間と価格)を取得する
  MqlTick tick={}; // ティックデータを格納するための構造体を宣言
  if(!SymbolInfoTick(Symbol(),tick)) // ティック情報の取得に失敗した場合
    {
    // エラーメッセージをエキスパートログに出力
    Print("SymbolInfoTick() failed. Error code: ",GetLastError());
    return;
    }

この部分では、作成されたピクセルデータの配列サイズの確認や、ティックデータ(現在の価格と時間情報)の取得を行っています。これにより、リソースが正しく作成されたかの確認と、グラフィック表示のための基本的なデータを取得しています。以下に、詳細な解説を行います。

ピクセルデータ配列サイズの確認

  • Print関数
    Print関数は、指定したメッセージをエキスパートログに出力します。ここでは、作成されたピクセルデータの配列サイズを確認しています。rc_data.Sizeで、ピクセル配列rc_dataのサイズ(ピクセル数)を取得し、そのサイズがエキスパートログに出力されます。これにより、配列が正しく初期化され、設定されたかどうかを確認することができます。

ティックデータの取得

次に、現在のティックデータ(価格と時間の情報)を取得します。

ティックデータの取得が失敗した場合、エラーコードをエキスパートログに出力し、処理を終了します。これにより、データの取得が正常に行われたかどうかをチェックし、問題があればGetLastError関数を使ってその原因を特定することができます。

この処理では、グラフィックリソースをチャート上に表示するために必要な価格と時間情報を取得しています。価格や時間に基づいて正確に表示するために、最新のティックデータが必要となります。

サンプルコード解説5:OnStart関数部分その4

//--- 最後のティック価格と時刻の座標を使用してビットマップオブジェクトを作成する
  string obj_name="Bitmap"; // ビットマップオブジェクトの名前を指定
  if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid)) // ビットマップオブジェクトの作成に失敗した場合
    {
    // エラーメッセージをエキスパートログに出力
    Print("ObjectCreate() failed. Error code: ",GetLastError());
    return;
    }

この部分では、ティックデータ(価格と時間)の座標を使用して、チャート上にビットマップオブジェクトを作成する処理が行われています。オブジェクトが作成できなかった場合には、エラーメッセージがエキスパートログに出力されます。ここでは、ビットマップオブジェクトの作成プロセスとエラーハンドリングについて解説します。

ビットマップオブジェクトの作成

  • obj_name変数
    obj_nameは、ビットマップオブジェクトの名前を指定するための変数です。ここでは「Bitmap」という名前が指定されています。この名前を使用して後でオブジェクトを操作することが可能です。
  • ObjectCreate関数
    ObjectCreate関数は、指定されたオブジェクトをチャート上に作成するための関数です。この場合、ビットマップオブジェクト(OBJ_BITMAP)を作成し、ティックデータの時間(tick.time)と価格(tick.bid)に基づいてその座標を設定します。ObjectCreate関数には、チャートID(ここでは現在のチャートを表す0)やオブジェクト名、オブジェクトのタイプ(OBJ_BITMAP)、座標情報が引数として渡されます。

エラーハンドリングとGetLastError関数

ビットマップオブジェクトが正常に作成されると、後の処理でこのオブジェクトを使ってグラフィックを表示できるようになります。エラーが発生した場合、GetLastError関数を使用して原因を調査し、問題を解決する手がかりを得ることができます。

サンプルコード解説6:OnStart関数部分その5

 //--- ビットマップオブジェクトの幅と高さを設定する
  ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);  // 幅を設定
  ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height); // 高さを設定
  
  //--- オブジェクトのアンカーポイントをその中心に設定する
  ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER); // オブジェクトのアンカーを中心に設定

  //--- 作成されたグラフィックリソースをビットマップオブジェクトに設定する
  //--- リソース名の前に「::」を付けて指定
  ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name); // グラフィックリソースをオブジェクトに関連付け

この部分では、ビットマップオブジェクトの幅や高さ、アンカーポイントの設定、そしてグラフィックリソースの関連付けが行われています。ビットマップオブジェクトをチャートに適切に配置し、表示するために重要な設定がここで行われます。以下に各処理を詳しく解説します。

ビットマップオブジェクトの幅と高さを設定

  • ObjectSetInteger関数
    ObjectSetInteger関数は、指定されたオブジェクトのプロパティを整数値で設定するための関数です。ここでは、ビットマップオブジェクトの幅と高さを設定しています。
  • 0
    これは、チャートIDを示しています。0を指定することで、現在アクティブなチャートを対象にしています。
  • obj_name
    ビットマップオブジェクトの名前です。ここでは「Bitmap」という名前でオブジェクトを作成しているため、それを指定しています。
  • OBJPROP_XSIZE
    この識別子は、オブジェクトの横幅を表すプロパティです。次の引数で指定された値(rc_width)を、ビットマップオブジェクトの幅として設定します。
  • OBJPROP_YSIZE
    こちらは、オブジェクトの縦幅を表すプロパティです。次の引数で指定された値(rc_height)を、ビットマップオブジェクトの高さとして設定します。
  • rc_width / rc_height
    それぞれ、ビットマップオブジェクトの幅と高さを指定しています。先に定義した画像リソースの幅と高さに合わせて設定されます。

オブジェクトのアンカーポイントを設定

グラフィックリソースをビットマップオブジェクトに設定

最後に、作成したグラフィックリソースをビットマップオブジェクトに関連付けます。

  • ObjectSetString関数
    ObjectSetString関数は、オブジェクトの文字列プロパティを設定するために使用されます。ここでは、グラフィックリソースをビットマップオブジェクトに関連付けています。
  • OBJPROP_BMPFILE
    これは、オブジェクトに使用するビットマップ画像を指定するためのプロパティです。ここで指定するリソースは、事前に作成したグラフィックリソースです。
  • “::” + rc_name
    グラフィックリソース名の前に「::」を付けることで、動的に作成されたリソースであることを示しています。rc_nameは、前の処理で作成したリソース名「Resource」を指しており、これをビットマップオブジェクトに関連付けます。

この部分では、ビットマップオブジェクトのサイズと位置を指定し、作成したグラフィックリソースをそのオブジェクトに関連付ける処理が行われています。各引数は、オブジェクトの大きさや配置、使用するリソースの指定に関わるもので、適切に設定することで、チャート上に正しく画像が表示されるようになります。

サンプルコード解説7:OnStart関数部分その6

 //--- 透明度200のDodgerBlue色を設定する
  uint clr=ColorToARGB(clrDodgerBlue,200); // カラーをARGB形式で設定(DodgerBlue色、透明度200)
  
  //--- ピクセル配列全体を設定した色で塗りつぶす
  ArrayInitialize(rc_data,clr); // ピクセル配列を指定した色で初期化

  //--- グラフィックリソースデータを更新し、チャートを再描画する
  Update(rc_name,rc_data,rc_width,rc_height,true); // リソース更新と再描画
 }

この最後の部分では、DodgerBlueという色を指定し、透明度を加味した形でピクセル配列を塗りつぶし、その後グラフィックリソースを更新してチャートを再描画する処理が行われています。

DodgerBlue色と透明度を設定

  • ColorToARGB関数
    ColorToARGB関数は、指定された色と透明度を使って、ARGB形式(アルファ、赤、緑、青の値を含む形式)に変換します。この関数を使用して、DodgerBlueという青系の色に透明度200を適用しています。透明度の値は0(完全に透明)から255(完全に不透明)までの範囲で指定でき、ここでは200に設定されているため、やや透明な色が適用されます。
  • clrDodgerBlue
    これはDodgerBlueという特定の色を表す定数です。青系の鮮やかな色で、ユーザーインターフェースやビジュアル表示でよく使用されます。
  • 200
    この値は透明度を示します。255に近いほど不透明で、0に近いほど透明になります。ここでは200を指定しているので、少し透明な状態でDodgerBlueが適用されます。

ピクセル配列を色で塗りつぶす

グラフィックリソースの更新と再描画

  • Update関数
    Update関数は、先ほど初期化したピクセル配列を使って、グラフィックリソースを更新し、チャートを再描画します。この関数により、ピクセルデータがリソースに反映され、すぐにチャート上でその変更が視覚的に確認できるようになります。
  • rc_name
    これは、先ほど作成したグラフィックリソースの名前です。リソースを指定して、その内容を更新します。
  • rc_data
    ピクセルデータを格納した配列です。この配列には、DodgerBlueの色と透明度200が適用された状態でデータが入っています。
  • rc_width / rc_height
    グラフィックリソースの幅と高さを指定しています。先ほど指定した100ピクセル×100ピクセルの画像サイズに合わせてリソースが更新されます。
  • true
    この値は、リソースを更新した後にチャートを再描画するかどうかを示しています。trueを指定することで、リソースの変更が即座にチャートに反映されます。

これで、チャート上に指定された色と透明度で作成されたビットマップオブジェクトが表示されることになります。

タイトルとURLをコピーしました