我的方法。核心是引擎。 - 页 177

 
Реter Konow:

我需要制定一个解决方案。我的窗口由一组MT物体组成--画布。他们的图像需要先单独缩小,然后再合并成一个。我需要这样一种算法。也就是说,我们可以说是单独的,但要把缩小的图像结合起来,还不行。

计算物体的相对坐标的变化。他们有一个出发点。X和Y。相对于总画布--窗口的宽度和高度的总尺寸,重新计算它们。

 
Artyom Trishkin:

计算物体的相对坐标的变化。他们有一个出发点。X和Y。重新计算它们相对于整个kanvas-窗口的总宽度和高度。

我明白这个意思。如果尼古拉说不,我就试一试。谢谢你。

 
Реter Konow:

我需要制定一个解决方案。我的窗口由一组MT物体组成--画布。他们的图像需要先单独缩小,然后再合并成一个。我们需要这样一种算法。也就是说,我们可以说是单独的,但要把缩小的图像结合起来,还不行。

首先,当然,它必须被制作出来。 我的意思是,它必须有一点连贯的外观。即使在过去,他们也会说--停下来,放出来......但不要紧,火车不会停下来;-)让我们相信,这是永恒的作者的版本......

既然我们在与C#共舞,那就看看OpenGL是否能 "领先于地球"。并用它在 "画布 "上作画(但在体面的地方,它不叫这个名字,而是叫背景)。它的速度会非常快,你可以随心所欲地叠加、缩放、旋转、扭曲。

 
对不起,我不去。
我的安慰点是,我自己设定任务,自己完成,我不设定别人的任务,也不完成别人的任务。

 
Artyom Trishkin:

计算相对物体坐标的变化。他们有一个出发点。X和Y。相对于整个画布-窗口的整体宽度和高度,重新计算它们。

这种矢量缩放的方法在视觉上会比光栅缩放逊色很多。 那么文字呢?字体大小 将不成比例地 "跳 "起来
如果形状的坐标可以被设置为小数(double)而不是整数(int)值,那么矢量缩放是可以接受的。但这需要一个新的具有抗锯齿的高级Canvas库。
 
Maxim Kuznetsov:

首先,当然,它必须被制作出来。 我的意思是,它必须有一点连贯的外观。你需要做的是让它看起来更有整体性......这就像他们过去常说的--停下来,让它出来......但来吧,火车永远不会停下来;-)我们只能说这是永恒的作者的版本......

既然我们在与C#共舞,那就看看OpenGL是否能 "领先于地球"。并用它在 "画布 "上作画(但在体面的地方,它不叫这个名字,而是叫背景)。它的速度会非常快,你可以随心所欲地叠加、缩放、旋转、扭曲。

如果为自己写作,当然可以。但整个解析的事情是在市场上。
你是否使用过OpenGL或DirectX?他们是否使用显卡资源?
ZS 虽然这是一个愚蠢的问题。他们当然会这样做。

我不明白,为什么开发商在OpenCL上做文章,而不是OpenGL?可能是因为这更容易做到。

SZY 我读过关于OpenCL的文章。我读过关于OpenCL的文章,这项技术更倾向于计算,这也解释了为什么选择不支持OpenGL。

 
彼得,如果你能为你的GUI学习OpenCL,那会很酷。如果我不糊涂,就会对市场起作用。当然,你只需要让用户安装OpenCL内核,他们的显卡也要支持它。
因为长期以来一直是有可能的,但我们还没有看到在这个方向上的任何活动。

 
Nikolai Semko:
这种矢量缩放的方法在视觉上会比光栅缩放逊色很多。 那么,文本呢?字体大小 将不成比例地 "跳动"。
如果形状的坐标可以被设置为小数(double)而不是整数(int)值,那么矢量缩放就可以接受。但这需要一个新的具有抗锯齿的高级Canvas库。

首先想到的是。可能是受我在3D Studio MAX中长期使用矢量图的经验影响--我习惯于用这样的方式思考。是的,当然都是用配音的,顺便说一下,在视觉上非常胜过Photoshop中的光栅缩放。

 
Nikolai Semko:
这种矢量缩放的方法在视觉上会比光栅缩放逊色很多。 那么,文本呢?字体大小 将不成比例地 "跳动"。
如果形状的坐标可以被设置为小数(double)而不是整数(int)值,那么矢量缩放是可以接受的。但这需要一个新的具有抗锯齿的高级Canvas库。

这时我想到了一个办法:取一个所需窗口形式的光栅图像,然后把它作为一个单一的光栅对象进行缩放。

 
Artyom Trishkin:

这时我想到了一个办法:取一个所需窗口形状的位图,然后把它作为一个单一的位图对象进行缩放。

还能是什么呢?我想这就是彼得想要的。

下面是一个现成的函数,用于放大存储在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