帆布很酷! - 页 88

 
Vitaliy Kuznetsov #:

我还注意到一个错误

该图像导致错误。它肯定是一张 PNG,但数据中没有 DPI

//有些图像也没有 PDI 数据,但它们可以工作。

我已经写过,PNG 解压缩算法不是我开发 的,我是7 年前的 Zorro。更准确地说,他肯定是从一些 C++ 代码移植过来的。而且,这段代码总是出错,我只是绕过了这个错误,直接忽略了它,之后解压缩就成功了。这就是为什么可能会有一些接头。我不了解 PNG 格式的规范及其版本。也许你需要更详细地研究一下这种格式或 jpg 格式。

尤其是这个 png 文件,它的方块没有透明度,颜色遮罩是 8 位的,而不是 24 位的。

 
Renat Akhtyamov 设置指示器....。

像这样

我想它会在市场上大受欢迎的。

这就是为什么我做了一个透明背景图标解析和缩放的例子。


 
Nikolai Semko #:

正如我已经写过的,PNG 解压缩算法不是我开发 的,而是Zorro 7 年前 开发的 。更准确地说,他肯定是从一些 C++ 代码移植过来的。而且,这段代码总是出错,我只是绕过了这个错误,直接忽略了它,之后解压缩就成功了。这就是为什么可能会有一些接头。我不了解 PNG 格式的规范及其版本。也许你需要更详细地了解这种格式或 jpg 格式。

尤其是这个 png 文件,它的方格没有透明度,颜色掩码是 8 位的,而不是 24 位的。

Nikolai Semko#:

我试过了。我发现只有在调整大小时才会出现方块。这就是为什么我的调整大小算法可能不够完美。我已经写过一次,这个算法是很久以前在半天内临时创建的。现在,我想用完全不同的方式来完成这个算法。但遗憾的是,我现在还没有时间。

我自己明白,写 3 个以上的代码需要一天,5 个以上的则需要一个月。如果项目很大,条件的范围会更大。

就我们现有的而言,谢谢您。现在这些就够了。

 

在 kanvas 中,有什么方法可以让圆形渐变从中心开始填充屏幕?

这里有一个垂直渐变的例子 -https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

画布有办法从中心开始用圆形渐变填充屏幕吗?

这里有一个垂直渐变的例子 -https://www.mql5.com/ru/code/31689

这很容易做到。
,您只需要一个公式:

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]);
         }
      }
   }
}
渐变也通过 alpha 通道(透明度)进行
附加的文件:
 
Nikolai Semko #:

您可以使用该选项:

渐变还可以通过 Alpha 通道(透明度)来实现

谢谢,我会试试的。

 

尼古拉,你好

我曾要求您创建滑块,以便于选择查看图表的时间段

我是这个意思:


非常方便!
 
Renat Akhtyamov #:

尼古拉,你好

我曾要求您创建滑块,以便于选择查看图表的时间段

我是这个意思:


非常方便!
首先,这不是很方便(我的看法)。
其次,这种实现方式非常耗时
 
Nikolai Semko #:
首先,它不是很方便(我个人认为)
问题是,在实现这样的功能时,您将不可避免地面临滑块长度不足的灾难性问题。
通常情况下,这种方法是在单个滑块中实现的,而不是在一个滑块中实现的,滑块的宽度可以通过拖动按钮的边缘来改变,从而改变比例。但这种方法虽然更方便,却无法解决滑块长度的问题。