久芯网

touchgfx改变图片颜色的方法?

avatar L丶zs 提问时间: 2023-07-08 17:07:13 / 未解决

touchgfx是否有提供函数可以直接改变image控件中图片的颜色,类似LVGL中图片控件的recolor函数,对图片重新着色成某种纯色图片,如果touchgfx没有这种函数,是否有方法可以实现这种功能?

8个回答
  • avatar xudongqiang
    回答时间: 2023-07-08 17:26:04

    可以多P一张图,放进去。程序里面进行切换

  • avatar L丶zs
    回答时间: 2023-07-08 17:45:50
    xudongqiang 发表于 2023-2-8 09:24
    可以多P一张图,放进去。程序里面进行切换

    这样的话,每张不同颜色的图片都要存进外部FLASH了,会导致外部FLASH过大;如果能够通过程序去recolor成不同颜色的话,就只需要往外部FLASH中存入一张图片

  • avatar butterflyspring
    回答时间: 2023-07-08 18:18:37

    一种方法,可以准备多张图片,动态切换图片;另一种,可以参考Dynamic Bitmap,可为图片填充任意颜色 下面是参考链接 https://support.touchgfx.com/4.18/docs/development/ui-development/touchgfx-engine-features/dynamic-bitmaps

  • avatar xmshao
    回答时间: 2023-07-08 18:47:44

    你说的那些控件,指的是touchgfx Designer里面的那些BOX,LINE,Circle,Shape吗?若是, 他们的颜色都是可以编程调整的啊。 比如: Screen1ViewBase::Screen1ViewBase(){ boxWithBorderName.setPosition(240, 56, 337, 132); boxWithBorderName.setColor(touchgfx::Color::getColorFromRGB(212, 27, 27)); boxWithBorderName.setBorderColor(touchgfx::Color::getColorFromRGB(21, 24, 202)); boxWithBorderName.setBorderSize(20); add(boxWithBorderName);} Screen1ViewBase::Screen1ViewBase(){ touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE); shape.setPosition(140, 36, 200, 200); shape.setOrigin(100.000f, 100.000f); shape.setScale(1.000f, 1.000f); shape.setAngle(0.000f); shapePainter.setColor(touchgfx::Color::getColorFromRGB(60, 180, 230)); shape.setPainter(shapePainter); const touchgfx::AbstractShape::ShapePoint shapePoints4] = { { 0.000f, -100.000f }, { 100.000f, 0.000f }, { 0.000f, 100.000f }, { -100.000f, 0.000f } }; shape.setShape(shapePoints); add(shape);}

  • avatar L丶zs
    回答时间: 2023-07-08 19:09:42
    butterflyspring 发表于 2023-2-8 10:07
    **一种方法,可以准备多张图片,动态切换图片;另一种,可以参考Dynamic Bitmap,可为图片填充任意颜色 ...

    [md]第二种方法有具体的源码吗,之前尝试过用动态位图的方法去实现,但是失败了

  • avatar L丶zs
    回答时间: 2023-07-08 19:26:33
    xmshao 发表于 2023-2-8 10:50
    你说的那些控件,指的是touchgfx Designer里面的那些BOX,LINE,Circle,Shape吗?若是, 他们的颜色都是可以 ...

    image控件没有提供setColor

  • avatar xmshao
    回答时间: 2023-07-08 19:52:11

    假设我们针对一个BOX控件,你这样试试: box1.setColor(touchgfx::Color::getColorFromRGB(29,173,161)); box1.invalidate();

  • avatar xmshao
    回答时间: 2023-07-08 20:17:27

    如果是image的话,没法简单通过setcolor来操作。 比较简单的方法就是在image上方再画个单色BOX,我们根据事件情况来决定其可见性。 比方: if(ConditionOK) { box2.setVisible(false); box2.invalidate(); } else { box2.setVisible(true); box2.invalidate(); } 当然,你也可以尝试其它办法。

会员中心 微信客服
客服
回到顶部