更改框内图像的问题 FLTK

Posted

技术标签:

【中文标题】更改框内图像的问题 FLTK【英文标题】:Problem with changing image inside the box FLTK 【发布时间】:2021-07-07 18:54:45 【问题描述】:

我在更改 Fl_Box 中的图像时遇到问题(Fl_PNG_image size 25x25[enter image description here][1])。

所以这里是改变盒子的代码部分:

        if(strcmp(payload, "heat")==0) tryb_pracy_box->image(grzanie_png);
        if(strcmp(payload, "cool")==0) tryb_pracy_box->image(chlodzenie_png);
        tryb_pracy_box->redraw();

然后我有一个 Fl::check();

但是当我尝试更改图像时,结果如下所示: [1][1]:https://i.stack.imgur.com/xb7by.png

据我了解,图像“出现”在标签上,但是当我尝试使用不同的对齐方式时,它没有帮助。

这是我正在使用的图片 [2][2]:https://i.stack.imgur.com/h0GVz.png [3][3]:https://i.stack.imgur.com/OS2bC.png

提前致谢!

【问题讨论】:

【参考方案1】:

此处描述的此类效果通常是由具有“无背景”的小部件引起的,即框类型 FL_NO_BOX 或 FL_*_FRAME 类型之一。如果您更改图像或标签(假设它们在框内),则更改的标签/图像会覆盖现有标签。在这种情况下,您有两种选择:

    重绘父widget,将tryb_pracy_box->redraw();改为tryb_pracy_box->parent()->redraw(); 将框类型更改为具有纯色背景的框类型,例如FL_FLAT_BOX。

如果标签(和图像)在小部件之外,则在更改标签时肯定需要绘制父小部件。

【讨论】:

【参考方案2】:

我发现子类化 Fl_Box 并实现(覆盖)draw 方法更容易。在其中你可以调用 fl_draw_image(...) 和 fl_draw(const char *, ...)。这允许您在图像上精确指定文本的坐标,而无需调整相对于图像的对齐方式。您可以在您的类中存储一个图像指针并更改它所指向的内容。

【讨论】:

以上是关于更改框内图像的问题 FLTK的主要内容,如果未能解决你的问题,请参考以下文章

按钮SwiftUi内图像的背景颜色问题

div内图像的垂直对齐

Instagram - 用于过滤日期范围内图像的 API

容器内图像的颤动不透明度

离子头内图像的大小

div内图像的垂直中间对齐? [复制]