ljr13141503189

ljr13141503189

0个粉丝

32

问答

0

专栏

0

资料

ljr13141503189  发布于  2018-02-05 13:49:59
采纳率 0%
32个问答
6899

运用RGN叠加bmp格式图片但是只出现边框的问题

 
首先谢谢 zhuangweiye前辈   我需要先改正提问的态度和方式   同时对论坛里的各位前辈说句对不起     以后我会多注意自己提问的方式
下面进入我的问题


        利用rgn叠加bmp图片  图片是自己用ps画的680*680像素的静态图片 然后通过画板转化为bmp格式的图片  bmp保存时选择的是24   16以及256格式的在载入时报错    下面贴上我的代码

       

        对于RGN的初始化以及参数设定

       

        创建两个handle  针对于两路VI    VI通道分别是4和8
       
       

       

        初始化完成后,执行显示线程

       

        载入bmp格式图片的函数是海思sample_region中自带的函数   本人的工程中已经包含了头文件以及函数定义

        以上就是关于图片叠加的代码段    VI、VPSS、Venc已经在之前设置验证好的  代码运行没有报错,也没有返回错误的提示信息

        以下是调试贴图:

        cat /proc/umap/vi
       

        cat /proc/umap/rgn
       

        显示器显示:
       

        以上是本人的代码和程序运行后的显示情况  前后透明都是设置的128   边框显示但是图片内容不显示  希望可以得到各位前辈的帮助   

        PS:哪位前辈可以指点一下用RGN画出一个可以在视觉上将屏幕分割的米“字“   能有帖子链接或者网页链接的更好   谢谢各位前辈

       

       
       

       
我来回答
回答40个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 14:31:12
认可0
看输出好像是只有背景显示出来了, 首先看看1.bmp是不是就是一个黑图

显示没有变化的OSD, 没有必要搞一个线程, 直接
HI_MPI_RGN_Create()
HI_MPI_RGN_AttachToChn()
HI_MPI_RGN_SetBitMap()
即可

楼主先试一下在初始化时直接显示

ljr13141503189

0个粉丝

32

问答

0

专栏

0

资料

ljr13141503189 2018-02-05 14:52:56
认可0
好的  我去把代码改下    谢谢您

查看SDK   有两点不是很明白 希望您可以指点一下 :

1.在HI_MPI_RGN_SetBitMap中有这么一句话 :      位图的像素格式必须和区域的像素格式一致。
这个位图指的是我载入的bmp图片吗?   我设置的RGN格式为PIXEL_FORMAT_RGB_1555    是不是需要将我自己画的图片的像素格式也设为1555 如果是这样   如何设置 ?


2.接上个问题      在OVERLAYEX_CHN_ATTR_S数据类型中,  区域内存信息为 PIXEL_FORMAT_RGB_1555 格式时,芯片将会扩展 Alpha 值。
当 Alpha 位为 1 时,芯片使用 u32FgAlpha 进行透明度叠加;当 Alpha 位为 0 时,
芯片使用 u32BgAlpha 进行透明度叠加。

这句话应该怎么理解 ?


ck2952

0个粉丝

14

问答

0

专栏

0

资料

ck2952 2018-02-05 15:27:52
认可0
论坛里有做这个的讨论,这个我之前也做过,代码参考SDK里面的sample,大概说一下我的步骤,首先我使用电脑带的画图工具制作的bmp,先设定一个指定像素的图,纯白,然后在图上画米字,纯红色或其他,保存为bmp,最后在region_sample调用bmp时注意把背景设置为全透明就可以了

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 15:33:47
认可1
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84207&ptid=38851]ljr13141503189 发表于 2018-2-5 14:52[/url]
好的  我去把代码改下    谢谢您

查看SDK   有两点不是很明白 希望您可以指点一下 :
[/quote]

1 的意思就是甩锅
就是说如果设定了ARGB1555格式, 那么海思就认为buffer中的数据是ARGB1555的, 如果用户没有填对, 那锅海思不背

2. 刚回答了相关的问题, 再贴一下
u32FgAlpha Alpha 位为1 的像素点的透明度。也称前景Alpha。
u32BgAlpha Alpha 位为0 的像素点的透明度。也称背景Alpha。

举例说明:
比如 u32FgAlpha = 128;u32BgAlpha = 0; 假定0表示透明, 128表示不透明

在ARGB1555格式下, 像素A的值是0x7fff, 像素B的值是0x8000
可以看到像素A的 Alpha 位为0, 那么像素B的 Alpha 位为1

那么
u32FgAlpha对于像素A没有作用, u32BgAlpha有作用, 作用效果就是被透明了
u32FgAlpha对于像素B有作用, u32BgAlpha没有作用, 作用效果就是显示了像素B

所以OSD中的像素点的alpha也很重要, 意思就是用alpha区分前景和背景, 比如前景的alpha = 1, 背景的alpha = 0,然后配合u32FgAlpha和u32FgAlpha就能做到了

ljr13141503189

0个粉丝

32

问答

0

专栏

0

资料

ljr13141503189 2018-02-05 15:59:05
认可0
这一层统一回复下楼上两位前辈   

首先贴下我的效果图:



按照zhuangweiye前辈的方法,通过把线程去掉,直接执行函数,其余代码思路和ck2952前辈的基本一致,已经可以看到结果

但是!!!!!!!!!!!!!!!!!

项目想要实现的功能是图片中的白底不显示   只显示红色的米字
现在我进行如下设置:

        stChnAttr.unChnAttr.stOverlayExChn.u32BgAlpha   = 255;
        stChnAttr.unChnAttr.stOverlayExChn.u32FgAlpha   = 0;

按照我之前的想法   后景不透明 前景全透明   可以只显示米字的红线而不显示白色的底    结果是全都不显示    所以我之前的思路应该是错误的

为了实现功能,我一共有三种思路:
第一种:通过不同数据源的绑定   实现该功能
        vo显示qt上画出的米字      然后vo(wbc)绑定在venc上  这样进行拍照和录像时,功能已经实现  但是WBC回写最大支持720      但是项目目标是1920*1080     所以这种方法不适用

第二种:就是如本帖所说的     但是通过loadbmp似乎也行不通

第三种:通过RGN在区域中(即整个屏幕上)  一个一个点的把米字画出来    但是sample中好像没有这种方法(或者有但是我没看懂:dizzy: )

希望各位前辈可以指点一下第三种方法

PS:zhuangweiye前辈   为什么线程没有报错但是不没有效果,而不改变任何参数的情况下不使用线程就可以实现,可以点拨一二吗 ?

再次谢谢各位前辈

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 16:11:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84223&ptid=38851]ljr13141503189 发表于 2018-2-5 15:59[/url]
这一层统一回复下楼上两位前辈   

首先贴下我的效果图:
[/quote]

要透明很容易, 仔细读一下5楼,

提示: loadbmp后得到了一个buffer(就是stBitmap.pData), 要再处理一下, 把红色的像素点设上alpha, 就是或上0x8000(只针对ARGB1555)即可区分前景和背景

简单看了代码, 没有什么错误, 但是一般都是attach后面跟上setbitmap, 不然就会显示背景

ljr13141503189

0个粉丝

32

问答

0

专栏

0

资料

ljr13141503189 2018-02-05 16:18:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84224&ptid=38851]zhuangweiye 发表于 2018-2-5 16:11[/url]
要透明很容易, 仔细读一下5楼,

提示: loadbmp后得到了一个buffer(就是stBitmap.pData), 要再处理一 ...[/quote]

以代码中两个handle为例   代码中的顺序是attach两个handle后再进行bmp的处理   

您的意思是最好的逻辑顺序应该是  attach->loadbmp->setbitmap   然后再进行下个handle的 attach->loadbmp->setbitmap   是吗

您说的透明我去好好研究一下   这里多问一句一下   我的bmp图片是在白色底面上画的一个米字  这样通过设置buffer也是可以实现白色区域透明 红色线条显示的是吗?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 16:22:17
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84225&ptid=38851]ljr13141503189 发表于 2018-2-5 16:18[/url]
以代码中两个handle为例   代码中的顺序是attach两个handle后再进行bmp的处理   

您的意思是最好的逻 ...[/quote]

第一个不太确定, 只是看到楼主的显示结果猜的

后一个确定可以

ljr13141503189

0个粉丝

32

问答

0

专栏

0

资料

ljr13141503189 2018-02-05 16:28:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84226&ptid=38851]zhuangweiye 发表于 2018-2-5 16:22[/url]
第一个不太确定, 只是看到楼主的显示结果猜的

后一个确定可以[/quote]

好的    前辈  我学习您发的透明的知识  然后去试一下

leo0925

0个粉丝

30

问答

0

专栏

0

资料

leo0925 2018-02-05 16:43:56
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84228&ptid=38851]ljr13141503189 发表于 2018-2-5 16:28[/url]
好的    前辈  我学习您发的透明的知识  然后去试一下[/quote]

楼主,我也遇到了osd背景和前景颜色问题,目前 我的参数设置是:
前景赋值为0x0x8000;背景赋值为0xffff;alpha都为1;
stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 128;
stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 0;
这样配置后,按理osd应该是透明的,可是osd显示出来了,而且背景色 是蓝色。 请前辈们 帮忙看看

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 16:49:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84229&ptid=38851]leo0925 发表于 2018-2-5 16:43[/url]
楼主,我也遇到了osd背景和前景颜色问题,目前 我的参数设置是:
前景赋值为0x0x8000;背景赋值为0xffff ...[/quote]

贴个/proc/umap/rgn 看看

leo0925

0个粉丝

30

问答

0

专栏

0

资料

leo0925 2018-02-05 16:54:15
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84230&ptid=38851]zhuangweiye 发表于 2018-2-5 16:49[/url]
贴个/proc/umap/rgn 看看[/quote]

[RGN] Version: [Hi3519V101_MPP_V1.0.2.0 B050 Release], Build Time[Dec  1 2016, 10:28:17]

-----REGION STATUS OF OVERLAY------------------------------------------------------------
Hdl     Type     Used    PiFmt        W        H  BgColor      Phy     Virt   Stride
   0        0        N        8      304       32      3ff 97080000 d0bf0000      640

-----REGION STATUS OF OVERLAY BUF USED---------------------------------------------------
Hdl     Type  CnvsNum     buf0     buf1     buf2     buf3     buf4     buf5
   0        0        2        0        0        0        0        0        0

-----REGION CALL TDE STATUS OF OVERLAY---------------------------------------------------
Hdl     CallCnt      JobSuc     JobFail     TaskSuc    TaskFail      EndSuc     EndFail
   0           0           0           0           0           0           0           0

-----REGION CHN STATUS OF OVERLAY--------------------------------------------------------
Hdl  Type   Mod   Dev   Chn   bSh     X     Y  AphF  AphB Layer  bAQp    QP bQpDis  bInv  InvW  InvH  Luma  ChnM
   0     0  VENC     0     0     Y     0     0     0   128     0     N     0      N     N     0     0     0     0

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 17:00:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84232&ptid=38851]leo0925 发表于 2018-2-5 16:54[/url]
[RGN] Version: [Hi3519V101_MPP_V1.0.2.0 B050 Release], Build Time[Dec  1 2016, 10:28:17]

-----R ...[/quote]

能不能贴一下显示的情况,

stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 128;
stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 0;
的图

stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 0;
stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 128;
的图

leo0925

0个粉丝

30

问答

0

专栏

0

资料

leo0925 2018-02-05 17:07:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84234&ptid=38851]zhuangweiye 发表于 2018-2-5 17:00[/url]
能不能贴一下显示的情况,

stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 128;
[/quote]

嗯,图片名 对应case。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-05 17:16:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84236&ptid=38851]leo0925 发表于 2018-2-5 17:07[/url]
嗯,图片名 对应case。[/quote]

从现象上看 buffer里面的数据都是背景, 即alpha都是0

最好还是检查一下, buffer中的数据

leo0925

0个粉丝

30

问答

0

专栏

0

资料

leo0925 2018-02-05 17:22:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84237&ptid=38851]zhuangweiye 发表于 2018-2-5 17:16[/url]
从现象上看 buffer里面的数据都是背景, 即alpha都是0

最好还是检查一下, buffer中的数据[/quote]

两个结果,代码只是调换了 u32BgAlpha 和 u32FgAlpha 值;
而且 我前景值和背景值分别是:0x8000和0xffff;即alpha 值都为1. 按理不该是这样的现象。

ljr13141503189

0个粉丝

32

问答

0

专栏

0

资料

ljr13141503189 2018-02-06 09:12:53
认可0
前辈      按照您昨天说的更改buffer里的内容  我现在先上一下代码

        stChnAttr.unChnAttr.stOverlayExChn.u32BgAlpha   = 0;
        stChnAttr.unChnAttr.stOverlayExChn.u32FgAlpha   = 128;

        然后是Loadbmp里的:

       

        pData为void*型     按照上面的代码强转成HI_U8*型   然后在或上0x8000

        显示图像如下
       

        白色部分是透明的   

        前辈   可能昨天我的表述有错误     最终需要的效果是保留红线    白色的部分完全不显示    也就是说     屏幕上只有摄像头显示的内容和红线

        请问这样通过修改RNG和bmp的相关参数能实现吗 ?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-07 09:15:01
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84247&ptid=38851]ljr13141503189 发表于 2018-2-6 09:12[/url]
前辈      按照您昨天说的更改buffer里的内容  我现在先上一下代码

        stChnAttr.unChnAttr.stOverlayExCh ...[/quote]

首先,确定可以

其次, 楼主还是没有理解 alpha 的概念

*(HI_U8*)pstBitmap->pData) = *(HI_U8*)pstBitmap->pData) | 0x8000;
这个不太懂哦,一个HI_U8的数去或上0x8000?而且就做一个像素?

简单代码(没有测试过,只是表示个意思,前提是pstBitmap->pData中)
int i;
HI_U16 *src;

src = (HI_U16*)(pstBitmap->pData);
for ( i = 0; i < TOTAL_PIXELS; i++ )
{
        if ( *src == FG_COLOR )
        {
                *src |= 0x8000;
        }

        src++;
}

只针对ARGB1555格式,默认pstBitmap->pData中数据已经填好且每个像素的只最高位是0(16bits),
FG_COLOR就是要显示的颜色(16bits),具体值是什么,可以用打印的方法得到


另外,要透明还要设置RGN的前后景的alpha(下面是overlay, 如果是overlayex, 128改成255,结构名称自行修改)
stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 0;
stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 128;

leo0925

0个粉丝

30

问答

0

专栏

0

资料

leo0925 2018-02-07 09:41:56
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84302&ptid=38851]zhuangweiye 发表于 2018-2-7 09:15[/url]
首先,确定可以

其次, 楼主还是没有理解 alpha 的概念
[/quote]

@zhuangweiye 前辈;
需要画框,看文档 是可以用vgs,但是vgs 是在yuv上操作,怎么把画线的信息 送到vi venc呢?  
或者 画框 也可以通过osd 实现?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-02-07 10:02:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=84305&ptid=38851]leo0925 发表于 2018-2-7 09:41[/url]
@zhuangweiye 前辈;
需要画框,看文档 是可以用vgs,但是vgs 是在yuv上操作,怎么把画线的信息 送到vi  ...[/quote]

这个要看具体芯片的模块支持什么样的RGN了

其实,框不就是前景吗?
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区