HI_MPI_RGN_Create 设置透明
时间: 2023-06-28 13:11:38 浏览: 145
制作透明的窗口
HI_MPI_RGN_Create 函数可以创建一个区域(Region),该区域可以用于视频叠加、OSD、水印等应用。如果要设置区域为透明,可以在创建区域时设置透明度参数 alpha,例如:
```
HI_S32 HI_MPI_RGN_Create(HI_S32 s32RgnHandle, const HI_MPI_RGN_ATTR_S *pstRegion, HI_U32 u32Num);
```
其中,HI_MPI_RGN_ATTR_S 结构体中有一个 alpha 参数,可以设置区域的透明度,其取值范围为 [0, 255],0 表示完全透明,255 表示完全不透明。例如,设置 alpha 值为 0:
```
HI_MPI_RGN_ATTR_S stRgnAttr;
memset(&stRgnAttr, 0, sizeof(HI_MPI_RGN_ATTR_S));
stRgnAttr.enType = ...; // 设置区域类型
stRgnAttr.unAttr.stOverlay.stSize.u32Width = ...; // 设置区域宽度
stRgnAttr.unAttr.stOverlay.stSize.u32Height = ...; // 设置区域高度
stRgnAttr.unAttr.stOverlay.u32BgColor = ...; // 设置区域背景色
stRgnAttr.unAttr.stOverlay.u32CanvasNum = ...; // 设置区域画布数量
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32PhyAddr = ...; // 设置区域画布物理地址
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Width = ...; // 设置区域画布宽度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Height = ...; // 设置区域画布高度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Stride = ...; // 设置区域画布步长
stRgnAttr.unAttr.stOverlay.stCanvas[0].enPixelFormat = ...; // 设置区域画布像素格式
stRgnAttr.u32AttrSize = ...; // 设置区域属性大小
stRgnAttr.enDynamicRange = ...; // 设置区域动态范围
stRgnAttr.enPixelFmt = ...; // 设置区域像素格式
stRgnAttr.enVideoFormat = ...; // 设置区域视频制式
stRgnAttr.enCompressMode = ...; // 设置区域压缩模式
stRgnAttr.enSrcFrameRate = ...; // 设置区域源帧率
stRgnAttr.enDstFrameRate = ...; // 设置区域目标帧率
stRgnAttr.enDisplayFrameRate = ...; // 设置区域显示帧率
stRgnAttr.enPixelFormat = ...; // 设置区域像素格式
stRgnAttr.enRotation = ...; // 设置区域旋转角度
stRgnAttr.u32Depth = ...; // 设置区域深度
stRgnAttr.stLogo.stLogoSize.u32Width = ...; // 设置区域 Logo 宽度
stRgnAttr.stLogo.stLogoSize.u32Height = ...; // 设置区域 Logo 高度
stRgnAttr.stLogo.u32PhyAddr = ...; // 设置区域 Logo 物理地址
stRgnAttr.stLogo.u32Stride = ...; // 设置区域 Logo 步长
stRgnAttr.stLogo.enPixelFormat = ...; // 设置区域 Logo 像素格式
stRgnAttr.u32Layer = ...; // 设置区域图层
stRgnAttr.u32Priority = ...; // 设置区域优先级
stRgnAttr.u32RgnId = ...; // 设置区域 ID
stRgnAttr.u32CanvasNum = ...; // 设置区域画布数量
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32PhyAddr = ...; // 设置区域画布物理地址
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Width = ...; // 设置区域画布宽度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Height = ...; // 设置区域画布高度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Stride = ...; // 设置区域画布步长
stRgnAttr.unAttr.stOverlay.stCanvas[0].enPixelFormat = ...; // 设置区域画布像素格式
stRgnAttr.unAttr.stOverlay.u32BgColor = ...; // 设置区域背景色
stRgnAttr.unAttr.stOverlay.u32CanvasNum = ...; // 设置区域画布数量
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32PhyAddr = ...; // 设置区域画布物理地址
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Width = ...; // 设置区域画布宽度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Height = ...; // 设置区域画布高度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Stride = ...; // 设置区域画布步长
stRgnAttr.unAttr.stOverlay.stCanvas[0].enPixelFormat = ...; // 设置区域画布像素格式
stRgnAttr.unAttr.stOverlay.u32CanvasNum = ...; // 设置区域画布数量
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32PhyAddr = ...; // 设置区域画布物理地址
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Width = ...; // 设置区域画布宽度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Height = ...; // 设置区域画布高度
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Stride = ...; // 设置区域画布步长
stRgnAttr.unAttr.stOverlay.stCanvas[0].enPixelFormat = ...; // 设置区域画布像素格式
// 设置透明度为 0
stRgnAttr.unAttr.stOverlay.u32BgColor = 0x00000000;
stRgnAttr.unAttr.stOverlay.u32CanvasNum = 1;
stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Alpha = 0;
HI_S32 s32Handle = HI_MPI_RGN_Create(0, &stRgnAttr, 1);
if (s32Handle < 0)
{
printf("HI_MPI_RGN_Create failed with %#x!\n", s32Handle);
return HI_FAILURE;
}
```
上述代码中,stRgnAttr.unAttr.stOverlay.u32CanvasNum 表示区域画布数量,因为只有一个画布,所以设置为 1。stRgnAttr.unAttr.stOverlay.stCanvas[0].u32Alpha 表示第一个画布的透明度,因为要设置为完全透明,所以设置为 0。
阅读全文