求助:从采集卡得到的缓冲区数据指针*pBuf(24位RGB图像)如何在对话框图片控件上将图像显示出来?

andyboliu 2010-09-25 08:31:11
在VC++6.0下通过采集卡得到了*pBuf以及图像的height,weith,我想在对话框的IDC_STATIC图片控件上将图像显示出来,请请各位大神指点
...全文
162 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
昨夜无风 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 andyboliu 的回复:]
2楼能说的详细点不?
看到有人说用SetDIBitsToDevice()整理些代码,但运行时总报错,好像是dlg指针的使用问题(估计其它还有问题,只是还没发现~~),请各位指点指点。顺便:请问要显示图像下面的代码修改后是放在OnPaint()函数里面还是OnInitDialog()或者自己编写函数?

pBuf_=(BYTE*)pBuf;
CMyVidCapDlg* dlg;
……
[/Quote]

你参数没填完整吧,起码Bmi.bmiHeader.biSizeImage 都没填!
lizhigang34 2010-09-27
  • 打赏
  • 举报
回复

void drawDIB(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
);
}
andyboliu 2010-09-27
  • 打赏
  • 举报
回复
忘高手指教,急用~~
andyboliu 2010-09-26
  • 打赏
  • 举报
回复
2楼能说的详细点不?
看到有人说用SetDIBitsToDevice()整理些代码,但运行时总报错,好像是dlg指针的使用问题(估计其它还有问题,只是还没发现~~),请各位指点指点。顺便:请问要显示图像下面的代码修改后是放在OnPaint()函数里面还是OnInitDialog()或者自己编写函数?

pBuf_=(BYTE*)pBuf;
CMyVidCapDlg* dlg;
CWnd* wnd=dlg->GetDlgItem(IDC_STATIC_SHOW);

CDC* pDC = wnd->GetDC();
HDC hDC = pDC->GetSafeHdc();
CRect rect;
wnd->GetClientRect( &rect );

BITMAPINFO Bmi;
//先整理此区块内存
::ZeroMemory(&Bmi.bmiHeader,sizeof(Bmi.bmiHeader));
Bmi.bmiHeader.biSize=sizeof(Bmi.bmiHeader);//你自己改高宽
Bmi.bmiHeader.biWidth= lnWidth;
Bmi.bmiHeader.biHeight=-lnHeight;
Bmi.bmiHeader.biPlanes=1;
Bmi.bmiHeader.biBitCount=24; //24,如果是256,涉及调色板,会不一样
Bmi.bmiHeader.biCompression=BI_RGB;


SetDIBitsToDevice(hDC,0,0,rect.Width(),rect.Height(),
0,0,0,lnHeight,
pBuf_,&Bmi,
DIB_RGB_COLORS
);
lizhigang34 2010-09-25
  • 打赏
  • 举报
回复

int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);

只要自己构造位图信息。
gamemagic 2010-09-25
  • 打赏
  • 举报
回复
opengl
direct3d

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧