代码改变世界

监控告警配置的显示

2013-07-16 00:50  鉴于  阅读(502)  评论(0编辑  收藏  举报

IPC会将监控区域划分成多个小块,按块提供是否监控配置。这时监控客户端需要提供配置界面,显示视频时也需要在视频上画上多行多列的线,同时对告警区域填充颜色。

一种办法是对转成RGB24的图像数据直接进行象素处理。
由YV12转成RGB24后图像在内存中排列顺序为BGR BGR BGR 。。。BGR

而且是图像从左到右,从下到上排列。B是Blue象素的值,G是Green象素的值,R是Red象素的值。

为了处理方便定义了一个BGR的宏

#define BGR(b,g,r)     ((COLORREF)(((BYTE)(b)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(r))<<16)))

COLORREF bkColor;

BYTE  R = GetRValue(bkColor);
BYTE  G = GetGValue(bkColor);
BYTE  B = GetBValue(bkColor);
首先获取背景色的3个分量,
对图像进行象素处理:

新的颜色=(原有颜色 * Alpha值 / 255 + (1 – Alpha / 255) * 背景色

Alpha值越大,效果图跟原图越接近。直接将遮挡区域进行上述半透明处理,将新的颜色值设置给各个象素。如果是画水平和竖直分割线,直接用划线的颜色覆盖线上点的象素值。

 

当然这样是有性能损失,以后将会改用OpenGL实现