用 MQL 编写的用户界面图库 - 页 47

 
Реter Konow #:

最后一个窗口出现了 "错误"。进度条实际上显示的是 38%,但却写成了 58%。

这实际上是正确的,因为代码是这么写的:

__,p_bar, "p1",v_current,38、


....

在另一行中

__, value, "v1"、

说的是_,v_current,58、

因此造成了混淆。我太粗心了。

至于按钮,我只是找不到之前的图片。有一个特殊的十字和一个暂停图标。我会试着找到并修复它。
 

彼得,你的图标边缘有问题。非常刺眼。


这是因为你没有将使用阿尔法通道的颜色与背景混合。下面是混合两种使用阿尔法通道的颜色所需的功能。

void MixColor(uint clr, uint &addr) { // mix the color in the cell at addr with the color clr and enter the new value in the same cell
   if (GETRGBA(addr) == 0) {
      addr = clr;
      return;
   }
   union argb {
      uint clr;
      uchar c[4];
   } C;
   C.clr = clr;
   if (C.c[3] == 0) return;
   if (C.c[3] == 255) {
      addr = clr;
      return;
   }
   argb Bg;
   Bg.clr = addr;
   float a = C.c[3] / (float)255.0;
   float b = Bg.c[3]/ (float)255.0;
   float ab = b+a-b*a;
   C.c[3]=uchar(ab*255+0.49999);
   if (ab>0.002) {
      float a0 = a/ab;
      float a1 = b*(1-a)/ab;
      C.c[2] = uchar(C.c[2]*a0+Bg.c[2]*a1);
      C.c[1] = uchar(C.c[1]*a0+Bg.c[1]*a1);
      C.c[0] = uchar(C.c[0]*a0+Bg.c[0]*a1);
   }
   addr = C.clr;
}

您还可以查看如何使用 pnghttps://www.mql5.com/en/code/45439
 
Nikolai Semko #:

彼得,你的图标边缘有问题。
这很伤眼睛。


这是因为你没有将使用 alpha 通道的颜色与背景混合。以下是混合使用 alpha 通道的颜色的必要功能。


您还可以查看如何使用 pnghttps://www.mql5.com/en/code/45439
你好,尼古拉!

没有问题,因为图标就是这样的。请注意,16×16 的图标没有问题(不那么刺眼)。只有 32×32 的图标有这种缺陷。原因在于我下载图标的来源。:)

你只需 "偷 "来质量更好的标签。笑死我了。

总的来说,你是对的。用颜色工作会更好。

 
Реter Konow #:
你好,尼古拉

没有问题,因为图标就是这样的。请注意,16×16 图标没有问题。只有 32×32 的图标有这个缺陷。原因就在我下载图标的源文件中。:)

你只需 "偷 "来质量更好的标签。笑死我了。

现在有很多来源提供透明背景的普通 png 图标。


例如:https://pngtree.com/so/colored-icons

当然,你自己看吧,没有这些边缘伪影,你的图形用户界面看起来会更高质量。

 
Nikolai Semko #:


当然,您可以自行查看,但如果没有这种边缘像素化现象,您的图形用户界面会好看得多。

我不是在争论...当然会更好看。顺便说一句,我对图标的处理非常好。请注意任务栏按钮上的阴影。我让背景透明。但像素中存在颜色 "垃圾",很难用程序识别。比如边缘上的这些斑点。它们并不是严格意义上的一种颜色,而且很难将它们从图标本身分离出来以去除它们。这就是问题所在。

我们需要更好的图标。没有像素化的 "垃圾"。
 
Nikolai Semko #:

现在有很多来源提供透明背景的普通 png 图标。


例如: https://pngtree.com/so/colored-icons

我有空时会去看看。Senx!
 
Реter Konow #:
我不是在争辩。当然会更好看。顺便说一句,我的图标做得很好。请注意任务栏按钮上的阴影。我让背景透明。但像素中存在颜色 "垃圾",很难通过编程识别。比如边缘上的这些斑点。它们并不是严格意义上的一种颜色,很难将它们从图标本身分离出来并去除。这就是问题所在。

我们需要更好的图标。没有像素化的 "垃圾"。

透明背景正常 png 图标 没有"垃圾"。 垃圾出现在处理错误时。上面已经给出了正确的功能

我以前也是这样处理阴影的。现在我不再这么做了。
没有阴影、渐变和卷发的现代时尚。
简而言之,极简主义有利于提高渲染性能。

 
Nikolai Semko #:

透明背景正常 png 文件 没有垃圾。垃圾出现在不正确的处理过程中。上面给出了正确的功能

...

如果你不像我多年前那样 "盗版 "下载图标,一切都是这样。)))然后就没什么好处理的了,因为背景标记为-1。

在这种情况下,我的算法会在图标下插入像素表面的底色。甚至连透明度也不需要 "调整"。

但是,如果像素表面的颜色不是-1,而是其他颜色,那么将其从其他像素中分离出来是不现实的,透明度函数也无济于事。这就是问题所在。
 
Реter Konow #:

但是,如果一个像素的颜色不是-1,而是不同的颜色,那么将它与其他像素分开是不现实的,透明度函数也无济于事。问题就在这里。

我说的是透明背景(带 alpha 通道)的 png 图标。

 
Nikolai Semko #:
...

我以前也用过阴影。现在我不这么做了
没有阴影、渐变和卷曲的现代时尚。
简而言之就是极简主义,这有利于提高渲染效果。


当然,时尚是不同的,但如果我们严格地谈论渲染,那么对小图标阴影的额外处理只是对 16*16 数组单元进行初始化,其值由子公式计算得出。窗口中的每个图标都是如此,用手指就能数出来。渲染几乎不会有毫秒级的延迟。另外,重新绘制包含许多元素的大型画布的表面也是一个问题。毫无疑问,图形小工具的运行速度会减慢。但只有在第一次绘制或更改整个画布时才会如此。这并不总是这样,而只是在某些事件中。在其他情况下,我们只需从内存中删除已保存的资源,然后什么也不绘制。

就是这样...