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实现