キャンバスがカッコいい! - ページ 88

 
Vitaliy Kuznetsov #:

また、エラーにも気づいた。

この画像はエラーを引き起こしました。確かにPNGですが、データにDPIがありません。

//PDIデータがないものもありますが、動作します。

PNGの解凍アルゴリズムは私が開発した ものではないことは既に書いたが、7年前のゾロ である。正確には、あるC++のコードから移植したに違いない。しかも、このコードは常にエラーを出し、私はこのエラーを無視することで回避していた。だから、継ぎ目があるのかもしれない。PNGフォーマットとそのバージョンの仕様を理解していなかった。この形式やjpg形式についてもっと詳しく調べる必要があるかもしれない。

特にこのpngファイルは、24ビットではなく8ビットのカラーマスクで、透明度のない正方形で曲がっている。

 
Renat Akhtyamov インジケーターを 切り替えたり設定 したりするための独自のパネルを書くことができる......。

こんな感じ

これなら、市場でも受け入れられるだろう。

というわけで、透明背景のアイコンをパースして拡大縮小する例を作ってみた。


 
Nikolai Semko #:

すでに書いたように、PNG解凍アルゴリズムは私ではなく、7年前にゾロが 開発した ものだ。より正確には、彼がC++のコードから移植したに違いない。しかもこのコードは常にエラーを出し、私はこのエラーを無視することで回避し、その後解凍がうまくいった。だから、継ぎ目があるのかもしれない。PNGフォーマットとそのバージョンの仕様を理解していなかった。おそらく、このフォーマットかjpgフォーマットについてもっと詳しく調べる必要があるでしょう。

特にこのpngファイルは、24ビットではなく8ビットのカラーマスクで、透明度のない正方形で曲がっている。

ニコライ・セムコ#:

試してみました。四角形に気づいたのはリサイズの場合だけでした。だから私のリサイズアルゴリズムは完璧ではないのでしょう。このアルゴリズムは、かなり昔に文字通り半日でその場で作ったものだとすでに書いたことがある。今ならこのアルゴリズムは全く違うものになるだろう。しかし、残念ながらまだ時間がない。

私自身は、3人以上のコードを書くのは1日、5人以上は1ヶ月かかると理解している。プロジェクトが大きければ、その期間はさらに大きな範囲になる。

ありがとうございます。今はこれで十分です。

 

kanvasで、中心から円形のグラデーションで画面を埋める方法はありますか?

ここに垂直グラデーションの例がありました -https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

キャンバスには、中心から円形のグラデーションで画面を埋める方法がありますか?

ここに垂直グラデーションの例がありました -https://www.mql5.com/ru/code/31689


、必要な数式は1つだけです:

R2=X2+Y2

関数

 
Vitaliy Kuznetsov #:

キャンバスには、中心から円形のグラデーションで画面を埋める方法がありますか?

ここに垂直グラデーションの例がありました -https://www.mql5.com/ru/code/31689

このオプションが使えます:

void iCanvas::RadiusGrad(double x, double y, double r, uint clr_center, uint clr_end){
   int x_left = Floor(x-r);
   int x_right = Ceil(x+r);
   int y_top = Floor(y-r);
   int y_bottom = Ceil(y+r);
   double r2=r*r;
   if (x_left<0) x_left = 0;
   if (x_left>=m_width) return;
   if (x_right>m_width) x_right = m_width;
   if (x_right<0) return;
   
   if (y_top<0) y_top = 0;
   if (y_top>=m_height) return;
   if (y_bottom>m_height) y_bottom = m_height;
   if (y_bottom<0) return;
   
   argb c1,c2, c;
   c1.clr =clr_center;
   c2.clr =clr_end;
   
   for(int i_y=y_top;i_y<y_bottom;i_y++) {
      for(int i_x=x_left;i_x<x_right;i_x++) {
         int adr = i_y*m_width+i_x;
         double r1 = (i_x-x)*(i_x-x)+(i_y-y)*(i_y-y);
         if (r1<=r2) {
            double k = sqrt(r1)/r;
            for (int i=0;i<4;i++) c.c[i] = uchar(c1.c[i] + k*((int)c2.c[i]-c1.c[i]));
            MixColor(c.clr,m_pixels[adr]);
         }
      }
   }
}
グラデーションはアルファチャンネル(透明度)によっても変化します
ファイル:
 
Nikolai Semko #:

このオプションが使えます:

グラデーションはアルファチャンネル(透明度)によっても変化します

ありがとう、試してみるよ。

 

ニコライ、やあ!

一度、グラフの表示期間を選択するのに便利なスライダーを作ってほしいとお願いしたのですが...。

こういう意味です:


とても便利です!
 
Renat Akhtyamov #:

ニコライ、やあ!

一度、グラフの表示期間を選択するのに便利なスライダーを作ってほしいとお願いしたのですが...。

こういう意味です:


、、、、ーとてもー非常にー非常にー便利なー!
第一に、それはあまり便利ではない(IMHO)。
第二に、このような実現には時間がかかる。
 
Nikolai Semko #:
まず第一に、それはあまり便利ではありません(IMHO)。
このようなものを実装する場合、必然的にスライダーの長さが壊滅的に足りないことに直面するということです。
原則として、これは1つのスライダーではなく、1つのスライダーで実装され、その幅はボタンの端をドラッグすることで変更でき、それによってスケールが変わります。しかし、この方法は便利ではありますが、スライダーの長さの問題を解決するものではありません。
理由: