如何将DIB图像数据转成Bitmap?

zhouhaijun2 2010-06-18 03:39:06
大家好,我在使用WMF做流媒体截图程序,
pBuffer->GetBufferAndLength(ImgBuf,cbLen);
其中ImgBuf是流媒体的帧图像DIB数据地址,cbLen是数据长度。
请问如何将ImgBuf转成HBitmap呢?
多谢了
...全文
137 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhaijun2 2010-06-19
  • 打赏
  • 举报
回复
问题已经解决。谢谢大家的支持!
我是DELPHI开发者,想在TBITMAP中显示出位图,最后使用StretchDIBits解决问题
StretchDIBits(Image1.Canvas.Handle,0,0,bmInfo.bmiHeader.biWidth,bmInfo.bmiHeader.biHeight,
0,0,bmInfo.bmiHeader.biWidth,bmInfo.bmiHeader.biHeight,pbBuffer,bmInfo,DIB_RGB_COLORS,SRCCOPY );
副组长 2010-06-19
  • 打赏
  • 举报
回复
其实不用,直接操控数据不是很好吗?
CBitmap效率就降低了。
向立天 2010-06-19
  • 打赏
  • 举报
回复
CBitmap里有个函数是SetBitmapBits
Eleven 2010-06-19
  • 打赏
  • 举报
回复
xiuxianshen 2010-06-18
  • 打赏
  • 举报
回复

int GetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set
UINT cScanLines, // number of scan lines to copy

LPVOID lpvBits, // array for bitmap bits

LPBITMAPINFO lpbi, // bitmap data buffer
UINT uUsage // RGB or palette index
);
xiuxianshen 2010-06-18
  • 打赏
  • 举报
回复

int GetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // array for bitmap bits
LPBITMAPINFO lpbi, // bitmap data buffer
UINT uUsage // RGB or palette index
);
King030609 2010-06-18
  • 打赏
  • 举报
回复
GetDIBits行不?
wltg2001 2010-06-18
  • 打赏
  • 举报
回复
用SetDIBits将数据写进去试试
〉CDIB功能 提供针对设备无关位图的一系列操作。 〉CDIB使用方法 将DIB目录复制到工程的原文件目录中。 在工程的Source Files中添加DIB文件夹,并导入DIB目录中的所有文件。 在需要使用DIB的文件中添加 include "dib.h" using namespace DIB; 1)读取Bitmap图片 //CDib对象可以从读取Bitmap,DIB文件数据。 //之前需要创建CFile对象,而后从CFile对象读取数据。 CDib m_Dib; CFile* pf; pf=new CFile; pf->Open(m_ImageName,CFile::modeRead); //m_ImageName为路径加文件名,如"C:\\Img\\My_Bitmap.bmp" m_Dib.Read(pf); pf->Close(); delete pf; 2)保存CDib对象到文件 //m_Dib是包含有图像数据CDib对象 //pFile 指向已经创建的可对文件进行写操作的CFile对象 m_Dib.write(CFile* pFile) 3)从CDIB获得图像数据 //m_Dib 包含有图像数据CDib对象 //realDataFLag 选择是返回真实图像数据,还是返回灰度数据的布尔值变量(bool),为真时返回的是图像真实数据。 unsigned char * img; img=m_Dib.GetImgPtr(realDataFLag); //获得的图像数据是以左上角为(0,0)点开始的从左至右, //从上至下,具有真实宽度(非补4)的数据 //realDataFlag为真时返回的是图像真实数据 //realDataFlag为假时返回的是灰度化的图像数据 4)将图像数据赋给CDib对象 //m_Dib是包含有图像数据CDib对象 //img 指向图像数据的无符号字符型指针(unsigned char *) //realDataFLag 指明输入的是真实图像数据,还是返回灰度数据的布尔值变量(bool),为真时输入的是图像真实数据。 m_Dib.SetImgPtr(img,realDataFlag);//设置图像数据 5)从图像数据创建CDib对象 CDib m_Dib m_Dib.CreateDib(pImgData,width,height,nBitCount);//pImgData为指向图象数据的指针 //nBitCount一个像素所用的比特数 目前仅支持8 6)由CDib对象创建Bitmap对象 //m_Dib是包含有图像数据CDib对象 HBITMAP bitmap; CDC * pDC=AfxGetApp()->GetMainWnd()->GetDC(); bitmap=m_Dib.CreateBitmap(pDC)//输入值为 CDC * ,一般可通过AfxGetApp()->GetMainWnd()->GetDC()获得 7)显示图象中的特殊信息 在处理过程中将图像中的特殊信息用251~255表示(对彩色图像,将R、G、B赋予251~255的相同数值) 将灰度图象中灰度值大于等于251的不需特殊显示的像素赋为250, 将彩色图像中R=G=B且大于等于251的不需特殊显示的像素赋为(250,250,250) 而后按4)中描述的将图像数据赋给CDib对象 最后调用EnhanceColor()将CDib对象转化为可以显示特殊信息的图像

19,468

社区成员

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

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