hiNewer

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer  发布于  2016-10-20 11:51:25
采纳率 0%
38个问答
6220

基于Hi3531A的应用开发研究,Qt界面图形层如何显示出下层的视频层

 
      做了个简单的Qt界面,想在左上角的720*576的图像区域显示下层的视频层,其他区域还是qt的界面,其中qt上720*576的图像区域是用单独的videoWidget实现的,类似于把一个Qt界面的左上角的720*576的区域掏空,显示底层的视频层,其他区域保留,用使能stAlpha时,整个qt界面都透明了,怎样透明固定区域。。。请大神指点
我来回答
回答23个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-20 12:25:02
认可0
可以考虑一下HIFB的透明色

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-20 14:24:09
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39869&ptid=13070]zhuangweiye 发表于 2016-10-20 12:25[/url]
可以考虑一下HIFB的透明色[/quote]

请问是在需要的区域填充透明色吗,用Alpha好像都是全局设置透明色,这个填充要用到TDE吗,请您能再详细点。。。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-20 14:30:59
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39878&ptid=13070]hiNewer 发表于 2016-10-20 14:24[/url]
请问是在需要的区域填充透明色吗,用Alpha好像都是全局设置透明色,这个填充要用到TDE吗,请您能再详细点 ...[/quote]

可以在文档上看一下 有关FBIOPUT_ALPHA_HIFB的内容

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-20 14:37:24
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39879&ptid=13070]zhuangweiye 发表于 2016-10-20 14:30[/url]
可以在文档上看一下 有关FBIOPUT_ALPHA_HIFB的内容[/quote]

      3531A文档对Alpha的设置与网上的3531的不一样,那个最高位在哪里设置,也没有区域位置坐标设置这一块。。。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-20 15:08:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39880&ptid=13070]hiNewer 发表于 2016-10-20 14:37[/url]
3531A文档对Alpha的设置与网上的3531的不一样,那个最高位在哪里设置,也没有区域位置坐标设置这一 ...[/quote]

首先, 要使用ARGB1555格式

然后
        stAlpha.bAlphaEnable = HI_TRUE;
        stAlpha.bAlphaChannel = HI_FALSE;
        stAlpha.u8Alpha0 = 255;
        stAlpha.u8Alpha1 = 0;
        stAlpha.u8GlobalAlpha = 0x80;

        if (ioctl(fd, FBIOPUT_ALPHA_HIFB, &stAlpha) <0)
        {
                printf(" set FBIOPUT_ALPHA_HIFB err !\n");
                return -1;
        }

根据文档的说明
stAlpha.bAlphaEnable = HI_TRUE; // 使能
stAlpha.bAlphaChannel = HI_FALSE; // 不使能
stAlpha.u8Alpha0 = 255; //在RGB1:5:5:5 格式下,当最高位为0 时,选择该值作为Alpha 叠加的Alpha值。
stAlpha.u8Alpha1 = 0;    //在RGB1:5:5:5 格式下,当最高位为1 时,选择该值作为Alpha 叠加的Alpha值。
stAlpha.u8GlobalAlpha = 0x80; //在Alpha 通道使能时起作用。现在stAlpha.bAlphaChannel是false,也就是不起作用

什么意思呢?
举例来说:
如果图形层上的某个像素点值为 0x0xxx xxxx xxxx xxxxb (ARGB1555格式, 16bits/像素), 那么根据上面的意思使用stAlpha.u8Alpha0, 即255, 也就是直接显示这个像素
图形层上的某个像素点值为 0x1xxx xxxx xxxx xxxxb (ARGB1555格式, 16bits/像素), 那么根据上面的意思使用stAlpha.u8Alpha1, 即0, 也就是直接显示这个像素对应位置下面视频层的东西

这样一来想显示视频层, ok 只要把图形层的像素值最高位设为1, 只显示图形层, 把对应的像素最高位设为0





hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-20 17:02:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39882&ptid=13070]zhuangweiye 发表于 2016-10-20 15:08[/url]
首先, 要使用ARGB1555格式

然后
[/quote]

还是出不来想要的那块区域的透明,看看Qt方面的透明信息。。。

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-20 20:37:07
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39882&ptid=13070]zhuangweiye 发表于 2016-10-20 15:08[/url]
首先, 要使用ARGB1555格式

然后
[/quote]

HIFB的颜色位域信息上的颜色标记是什么意思,为什么我的Qt界面后面还有一个绿色画面?请大神解答一下

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 07:54:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39900&ptid=13070]hiNewer 发表于 2016-10-20 20:37[/url]
HIFB的颜色位域信息上的颜色标记是什么意思,为什么我的Qt界面后面还有一个绿色画面?请大神解答一下[/quote]

QT 是画在frame buffer 上的

而frame buffer的实际大小一般显示分辨率一样的, 也就是说看上去楼主只有画了一个窗口, 但是实际上图形层是铺满整个屏幕的, 后面的绿背景是frame buffer中的初始值(很可能根本就没设过)

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 09:01:15
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39903&ptid=13070]zhuangweiye 发表于 2016-10-21 07:54[/url]
QT 是画在frame buffer 上的

而frame buffer的实际大小一般显示分辨率一样的, 也就是说看上去楼主只有 ...[/quote]

哦,您的解答非常好,但是我想让绿色画面frame buffer下面的视频显示出来,就需要图形层透明,但是图形层透明后其上的Qt就会消失。。。有没有更好地办法

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 09:40:07
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39904&ptid=13070]hiNewer 发表于 2016-10-21 09:01[/url]
哦,您的解答非常好,但是我想让绿色画面frame buffer下面的视频显示出来,就需要图形层透明,但是图形层 ...[/quote]

看6楼, 先确定QT用的格式是不是ARGB1555格式, 然后可以这样测试

写个小程序, 打开QT用的fb, 按6楼的设置设一下, 把framebuffer mmap出来, 然后初始化为0x80 试一下

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 14:07:46
认可0
本帖最后由 hiNewer 于 2016-10-21 21:37 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=39907&ptid=13070]zhuangweiye 发表于 2016-10-21 09:40[/url]
看6楼, 先确定QT用的格式是不是ARGB1555格式, 然后可以这样测试

写个小程序, 打开QT用的fb, 按6楼的设 ...[/quote]

我设定了 左上角的960*540大小区域为0xf0,stAlpha.bAlphaEnablel = HI_TRUE; 设置使能,stAlpha.u8Alpha1 = 0x0,整个图形层消失了,Qt也消失了。

   

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 14:09:23
认可0
本帖最后由 hiNewer 于 2016-10-21 14:16 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=39924&ptid=13070]hiNewer 发表于 2016-10-21 14:07[/url]
我设定了 左上角的960*540大小区域为0xf0,stAlpha.bAlphaChannel = HI_TRUE; 设置使能,stAlpha.u8Alpha ...[/quote]

是不是不能局部透明图形层呢?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 14:45:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39925&ptid=13070]hiNewer 发表于 2016-10-21 14:09[/url]
是不是不能局部透明图形层呢?[/quote]

stAlpha.u8Alpha0 = 0x0;

改成 stAlpha.u8Alpha0 = 255; 试试

另外, 视频层有东西吗?

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 15:16:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39929&ptid=13070]zhuangweiye 发表于 2016-10-21 14:45[/url]
stAlpha.u8Alpha0 = 0x0;

改成 stAlpha.u8Alpha0 = 255; 试试
[/quote]

        
这种状况也不行啊,仍然无Qt画面,运行后台视频采集程序有视频输出
//stAlpha.bAlphaEnable = HI_FALSE;  /*叠加使能*/  

        stAlpha.bAlphaChannel = HI_FALSE; /*通道使能*/

        stAlpha.bAlphaEnable = HI_TRUE;  /*叠加使能*/  

        //stAlpha.bAlphaChannel = HI_TRUE; /*通道使能*/

        //stAlpha.u8Alpha0 = 0x0;

        stAlpha.u8Alpha0 = 0xff;//add

        //stAlpha.u8Alpha1 = 0xff;

        stAlpha.u8Alpha1 = 0x0;  //add

        stAlpha.u8GlobalAlpha = 0x80;

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 15:17:24
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39938&ptid=13070]hiNewer 发表于 2016-10-21 15:16[/url]
这种状况也不行啊,仍然无Qt画面,运行后台视频采集程序有视频输出
//stAlpha.bAlphaEnable = ...[/quote]

那个通道使能,有什么作用

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 15:22:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39929&ptid=13070]zhuangweiye 发表于 2016-10-21 14:45[/url]
stAlpha.u8Alpha0 = 0x0;

改成 stAlpha.u8Alpha0 = 255; 试试
[/quote]

我试了把通道也使能,就能出来画面了,但是画面的颜色比较偏暗,具体原理我也没搞懂。。。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 15:23:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39940&ptid=13070]hiNewer 发表于 2016-10-21 15:17[/url]
那个通道使能,有什么作用[/quote]

这个只是测试, 就是这个设置是有效果的

实际应用时, 只能在QT运行前运行一下, 设置一下, 不要mmap, 然后QT运行后 , 画窗口时用特定的颜色去画想透明的地方, 比如0x8000


hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 15:45:51
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39943&ptid=13070]zhuangweiye 发表于 2016-10-21 15:23[/url]
这个只是测试, 就是这个设置是有效果的

实际应用时, 只能在QT运行前运行一下, 设置一下, 不要mmap, 然 ...[/quote]

非常感谢您耐心的指导,“画窗口时用特定的颜色去画想透明的地方”您指的“想透明的地方”是图形层还是Qt界面呢,原谅我的愚钝

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 15:58:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39948&ptid=13070]hiNewer 发表于 2016-10-21 15:45[/url]
非常感谢您耐心的指导,“画窗口时用特定的颜色去画想透明的地方”您指的“想透明的地方”是图形层还是Qt ...[/quote]

QT 实际就是画在 frame buffer上的

测试程序里面初始化0x80, 等同于QT在相同的位置上填 0x80, 所以在QT上画

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-10-21 16:00:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39951&ptid=13070]zhuangweiye 发表于 2016-10-21 15:58[/url]
QT 实际就是画在 frame buffer上的

测试程序里面初始化0x80, 等同于QT在相同的位置上填 0x80, 所以在Q ...[/quote]

好的,谢谢您的指导,我还要加强理论知识学习
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区