你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

touchgfx改变图片颜色的方法?

[复制链接]
L丶zs 提问时间:2023-2-7 17:21 / 未解决

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

收藏 评论9 发布时间:2023-2-7 17:21

举报

9个回答
xudongqiang 回答时间:2023-2-8 09:24:33

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

L丶zs 回答时间:2023-2-8 09:45:16

xudongqiang 发表于 2023-2-8 09:24
可以多P一张图,放进去。程序里面进行切换

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

butterflyspring 回答时间:2023-2-8 10:07:01

一种方法,可以准备多张图片,动态切换图片;另一种,可以参考Dynamic Bitmap,可为图片填充任意颜色

下面是参考链接

https://support.touchgfx.com/4.18/docs/development/ui-development/touchgfx-engine-features/dynamic-bitmaps

xmshao 回答时间:2023-2-8 10:50:50
你说的那些控件,指的是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);}
L丶zs 回答时间:2023-2-8 11:20:44

butterflyspring 发表于 2023-2-8 10:07
**一种方法,可以准备多张图片,动态切换图片;另一种,可以参考Dynamic Bitmap,可为图片填充任意颜色 ...

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

L丶zs 回答时间:2023-2-8 11:21:36

xmshao 发表于 2023-2-8 10:50
你说的那些控件,指的是touchgfx Designer里面的那些BOX,LINE,Circle,Shape吗?若是,
他们的颜色都是可以 ...

image控件没有提供setColor

xmshao 回答时间:2023-2-8 15:05:50
假设我们针对一个BOX控件,你这样试试:




box1.setColor(touchgfx::Color::getColorFromRGB(29,173,161));


        box1.invalidate();
xmshao 回答时间:2023-2-8 15:55:50
如果是image的话,没法简单通过setcolor来操作。


比较简单的方法就是在image上方再画个单色BOX,我们根据事件情况来决定其可见性。 比方:




if(ConditionOK)
{
box2.setVisible(false);


box2.invalidate();


}
else
{
box2.setVisible(true);

box2.invalidate();

}




当然,你也可以尝试其它办法。
andyxman 回答时间:2023-6-27 13:30:12

L丶zs 发表于 2023-2-8 09:45
这样的话,每张不同颜色的图片都要存进外部FLASH了,会导致外部FLASH过大;如果能够通过程序去recolo ...

[md]如果是单一颜色的圆角矩形类的图片可以尝试使用SVG控件,SVG控件利用MCU实时渲染在存储方面要求就能降低不少

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版