私のアプローチコアはエンジンです。 - ページ 177

 
Реter Konow:

解決策を練る必要がある。私のウィンドウは、MTのオブジェクトであるキャンバスのセットで構成されています。まず個別に縮小し、次に1つにまとめる必要があります。そんなアルゴリズムが必要なのです。つまり、個々にはともかく、縮小した画像を合成するのは、まだです。

オブジェクトの相対座標の変化を計算する。スタート地点があるのです。XとY。キャンバス-ウィンドウ全体の幅と高さの合計サイズに対して、それらを再計算します。

 
Artyom Trishkin:

オブジェクトの相対座標の変化を計算する。スタート地点があるのです。XとY。カンヴァス全体の幅と高さの合計に対して再計算します。

なるほどと思いました。ニコライがダメと言うならやってみようか。ありがとうございます。

 
Реter Konow:

解決 策を練る必要がある。私のウィンドウは、MTのオブジェクトであるキャンバスのセットで構成されています。まず個別に縮小し、次に1つにまとめる必要があります。そんなアルゴリズムが必要なのです。つまり、個々にはともかく、縮小した画像を合成するのは、まだです。

まず、当然ですが、作らないといけない。 つまり、ちょっとまとまった感じがないとダメなんです。昔も言われましたが...止まれ、出せ...しかし気にするな、列車は止まらない;-) これは永遠の作者のバージョンだと信じましょう...。

C#で踊っているのだから、OpenGLは「地球の先を行っている」と思って見てください。そして、それを使って「キャンバス」(ただし、まともなところではそう呼ばず、コンテクストと呼ぶ)に描くのです。めちゃくちゃ速くなるし、オーバーレイ、拡大縮小、回転、ねじれも思いのままです。

 
すみません、パスします。
私のコンフォートポイントは、自分でタスクを決めて自分で達成することで、他人のタスクを決めたり、他人のタスクを達成したりしないことです。

 
Artyom Trishkin:

相対的なオブジェクトの座標の変化を計算する。スタート地点があるのです。XとY。キャンバス全体、つまりウィンドウの幅と高さに相対して再計算します。

このベクタースケーリングの方法は、ラスタースケーリングに比べて視覚的に非常に劣ることになります。 また、テキストについてはどうでしょうか。フォントサイズが 不釣り合いに "ジャンプ "する
ベクターのスケーリングは、図形の座標を整数値(int)ではなく、分数値(double)に設定できれば、問題ない。しかし、そのためには、アンチエイリアシングを備えた高度なCanvasライブラリが新たに必要になります。
 
Maxim Kuznetsov:

まず、当然ですが、作らないといけない。 というか、ちょっとまとまった感じがないとダメですね。もう少しホリゾントに見えるように...昔はよく言ったものです。止まれ、出せ...でもさあ、電車は止まらないよ;-) 永遠の作者バージョンということにしておきましょう......。

C#で踊っているのだから、OpenGLは「地球の先を行っている」と思って見てください。そして、それを使って「キャンバス」(ただし、まともなところではそう呼ばず、コンテクストと呼ぶ)に描くのです。めちゃくちゃ速くなるし、オーバーレイ、拡大縮小、回転、ねじれも思いのままです。

自分のために書くのであれば、もちろんです。でも、パースというのは、全部市場にあるんですよ。
OpenGLやDirectXを扱ったことがありますか?ビデオカードのリソースを使用しているのでしょうか?
ZS 愚かな質問ですが。もちろん、そうでしょう。

なぜ開発者がOpenGLではなくOpenCLにねじ込んだのか理解できないのですが?おそらく、そのほうがやりやすかったからでしょう。

SZY OpenCLについて読みました。OpenCLについて読みましたが、この技術はより計算に向いており、OpenGLを選ばなかった理由もそこにあります。

 
Peterさん、GUIのためにOpenCLを学ぶとかっこいいですよ。迷わなければ、マーケットに通用する。もちろん、ユーザーがインストールしたOpenCLカーネルと、それをサポートするビデオカードがあればよいのです。
なぜなら、ずっと前から可能だったのですが、まだこの方向での活動が見られないからです。

 
Nikolai Semko:
このようなベクタースケーリングの方法は、ラスタースケーリングに比べて視覚的に非常に劣ってしまいます。 また、テキストについてはどうでしょうか?文字サイズが 不釣り合いなほど「飛び」ます。
ベクターのスケーリングは、図形の座標を整数値(int)ではなく、分数値(double)に設定できれば、問題ない。しかし、そのためには、アンチエイリアシングを備えた高度なCanvasライブラリが新たに必要になります。

最初に思い浮かんだのはおそらく、3D Studio MAXで長年ベクターグラフィックスを扱ってきた影響もあり、そのような考え方に慣れているのでしょう。ちなみに、Photoshopのラスタースケーリングよりも視覚的に非常に優れています。

 
Nikolai Semko:
このようなベクタースケーリングの方法は、ラスタースケーリングに比べて視覚的に非常に劣ってしまいます。 また、テキストについてはどうでしょうか?文字サイズが 不釣り合いなほど「飛び」ます。
ベクターのスケーリングは、図形の座標を整数値(int)ではなく、分数値(double)に設定できれば、問題ない。しかし、そのためには、アンチエイリアシングを備えた高度なCanvasライブラリが新たに必要になります。

そこで思いついたのが、必要なウィンドウ形状のラスター画像を撮影し、それを1つのラスターオブジェクトとして拡大縮小することです。

 
Artyom Trishkin:

そこで思いついたのが、必要なウィンドウ形状のビットマップを取り、それを1つのビットマップオブジェクトとして拡大縮小することです。

他に何があるんだ?ピーターはそれを望んでいたのだと思う。

以下は、BMP[]配列に格納された画像をwidth_bmp xheight_bmp の大きさで拡大するための準備関数です。

void CImage::ResizeImage(double NewWidth)
  {
   if(NewWidth==0) NewWidth=1;
   double k=NewWidth/width_bmp; // меньше единицы
   double k2=k*k;
   double kk=width_bmp/NewWidth;  // больше единицы
   double w1=(double)width_bmp*k; int W=_ceil(w1);
   double h1=(double)height_bmp*k; int H=_ceil(h1);
   uint M[];
   int ArrSize=W*H;
   ArrayResize(M,ArrSize);
   int pos=0;
   double y0=0,x0,y1=kk,x1;
   for(int y=0; y<H; y++,y0=y1,y1+=kk)
     {
      x0=0; x1=kk;
      for(int x=0; x<W; x++,x0=x1,x1+=kk,pos++)
        {
         int xs=(int)x0;
         int xf=(int)x1;
         int ys=(int)y0;
         int yf=(int)y1;
         double r=0,g=0,b=0,p=0;
         int pos2=ys*(int)width_bmp+xs;
         for(int Y1=ys;Y1<=yf;Y1++,pos2+=(int)width_bmp)
           {
            double dx,dy;
            int pos1=pos2;
            if(Y1==ys) { dy=ys+1-y0; if(ys==yf) dy=dy-1+y1-yf;}
            else if(Y1==yf) dy=y1-yf;
            else dy=1;
            for(int X1=xs;X1<=xf;X1++,pos1++)
              {
               if(pos1<SizeArr)
                 {
                  if(BMP[pos1]!=0)
                    {
                     col.clr=BMP[pos1];
                     if(X1==xs) { dx=xs+1-x0; if(xs==xf) dx=dx-1+x1-xf;}
                     else if(X1==xf) dx=x1-xf;
                     else dx=1;
                     dx=dx*dy;
                     r+=(double)col.argb[2]*dx;
                     g+=(double)col.argb[1]*dx;
                     b+=(double)col.argb[0]*dx;
                     p+=(double)col.argb[3]*dx;
                    }
                 }
               else break;
              }
           }
         col.argb[0]=uchar(b*k2);
         col.argb[1]=uchar(g*k2);
         col.argb[2]=uchar(r*k2);
         col.argb[3]=uchar(p*k2);
         M[pos]=col.clr;
        }
     }
   C.Resize(W,H);
   ArraySwap(C.m_pixels,M);
   C.Update();
  }
ファイル:
CImage.mqh  12 kb