110,502
社区成员
发帖
与我相关
我的任务
分享
//回调函数,当收到一帧数据时
void __stdcall fnOnNewFrame(int width, int height, byte *bmpData)
{
BITMAPINFO bmpinfo; //位图信息结构,包含位图信息头和位图颜色信息
//位图信息头结构
bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFO); //本结构所占用的字节数
bmpinfo.bmiHeader.biWidth = width; //位图宽度,以像素为单位
bmpinfo.bmiHeader.biHeight = height; //位图高度,以像素为单位
bmpinfo.bmiHeader.biPlanes = 1; //目标设备的级别,必须为1
bmpinfo.bmiHeader.biBitCount = 32; //每个像素所需的位数,必须为1,4,8,24,32
bmpinfo.bmiHeader.biCompression = 0; //位图压缩类型,必须为0,1,2
bmpinfo.bmiHeader.biSizeImage = width * height; //位图大小,以字节为单位
bmpinfo.bmiHeader.biXPelsPerMeter = 0; //位图水平分辨率,每米像素数
bmpinfo.bmiHeader.biYPelsPerMeter = 0; //位图垂直分辩率,每米象素数
bmpinfo.bmiHeader.biClrUsed = 0; //位图实际使用的颜色表中的颜色数
bmpinfo.bmiHeader.biClrImportant = 0; //位图显示过程中重要的颜色数
CRect rc;
g_pDlg->GetClientRect(&rc);
HDC hdc = ::GetDC(g_pDlg->GetSafeHwnd());
//显示
::SetDIBitsToDevice(
hdc,
0,
0,
rc.Width(),
rc.Height(),
0,
0,
0,
height,
bmpData,
&bmpinfo,
DIB_PAL_COLORS
);
}
//接收网络数据
byte *pData = ....
//网络数据接收成功后,要通知调用这个DLL的用户
pfnCallBack(int width, int height, pData);
//width:位图宽,height:位图高,bmpData:位图的数据部分
public delegate void ProcessDelegate(int width, int height,ref byte bmpData);
public void fnOnNewFrame(int width, int height,ref byte bmpData)
{
MemoryStream ms = new MemoryStream(bmpData); //这里bmp的值为0,似乎在回调时,位图数据传输不成功
Image im = Image.FromStream(ms);
this.BackgroundImage = im;
}
//回调函数:当有新的视频帧时
typedef void (__stdcall *PFN_ON_NEW_FRAME)(int width, int height, byte *frameData);