社区
图形处理/算法
帖子详情
如何访问HBITMAP中的图像数据
zephyr007
2006-08-21 02:38:49
如何访问HBITMAP中的图像数据,希望能够将其中的图像数据取出来进行其他的处理,至于格式可以是RGBRGBRGB...或RRRRRRGGGGGGBBBBBB等都无所谓
...全文
426
7
打赏
收藏
如何访问HBITMAP中的图像数据
如何访问HBITMAP中的图像数据,希望能够将其中的图像数据取出来进行其他的处理,至于格式可以是RGBRGBRGB...或RRRRRRGGGGGGBBBBBB等都无所谓
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
superarhow
2006-08-22
打赏
举报
回复
GetDIBits
zephyr007
2006-08-21
打赏
举报
回复
HBITMAP是个怎样的内存块?是否可以做如下强制转换:
HBITMAP hBitmap = LoadImage(...);
BITMAPINFOHEADER* pBIH = (BITMAPINFOHEADER *)hBitmap;
...
zephyr007
2006-08-21
打赏
举报
回复
HBITMAP中的数据存储顺序与Bmp文件一样吗?是否仅仅是相差一个BITMAPFILEHEADER
lixiaosan
2006-08-21
打赏
举报
回复
只要你知道了bmp文件格式,就知道他的数据是怎么存储的了
位图基本结构
位图文件头 BITMAPFILEHEADER
位图信息头 BITMAPINFOHEADER
颜色表
位图数据
你也可以参考以下链接
http://www.vckbase.com/document/viewdoc/?id=674
折腾_苏州
2006-08-21
打赏
举报
回复
贴上手头程序上一段,仅供参考:
BOOL CDib::Load(const char *FileName)
{
if(data!=NULL)
{
for(int k=0;k<m_row;k++)
{
free(data[k]);
}
free(data);
free(m_pBIH);
}
CFile f_image;
BITMAPFILEHEADER BFH;
LPBITMAPINFOHEADER pBIH;
BOOL YN=f_image.Open(FileName,CFile::modeRead);
if(!YN)
{
return FALSE;
}
m_dwDibSize=f_image.GetLength()-sizeof(BITMAPFILEHEADER);
int count;
count=f_image.Read(&BFH,sizeof(BITMAPFILEHEADER));
if(count!=sizeof(BITMAPFILEHEADER)||
BFH.bfType!=19778)
{
f_image.Close();
return FALSE;
}
bmpinfosize=BFH.bfOffBits-sizeof(BITMAPFILEHEADER);
m_pBIH=(LPBITMAPINFO)malloc(bmpinfosize);
count=f_image.Read(m_pBIH,bmpinfosize);
if(count!=bmpinfosize)
{
free(m_pBIH);
f_image.Close();
return FALSE;
}
pBIH=(LPBITMAPINFOHEADER)m_pBIH;
int col ,row;
col=pBIH->biWidth;m_col=col;
row=pBIH->biHeight;m_row=row;
byteperline=((long)pBIH->biWidth*(long)pBIH->biBitCount+31L)/32*4;
f_image.Seek(BFH.bfOffBits,CFile::begin);
data= (unsigned char**)malloc((row)*sizeof(unsigned char*));
unsigned char* tempdata=(unsigned char*)malloc(byteperline);
if (data== NULL)
{
f_image.Close();
return FALSE;
}
for(int i=row-1;i>=0;i--)
{
data[i] = (unsigned char*)malloc(col);
if (data[i] == NULL)
{
f_image.Close();
free(data);
return FALSE;
}
f_image.Read(tempdata,byteperline);
if(m_pBIH->bmiHeader.biBitCount==8)
{
memcpy(data[i],tempdata,col);
}
if(m_pBIH->bmiHeader.biBitCount==24)
{
for(int j=0;j<col;j++)
{
//data[i][j]=tempdata[3*j+2];
data[i][j]=(unsigned char)(0.59*tempdata[3*j]+0.3*tempdata[3*j+1]+0.11*tempdata[3*j+2]);
}
}
}
//修改BITMAPINFO
m_pBIH=(LPBITMAPINFO)realloc(m_pBIH,1064);
m_pBIH->bmiHeader.biBitCount=8;
m_pBIH->bmiHeader.biClrUsed=256;
m_pBIH->bmiHeader.biSize=40;
m_pBIH->bmiHeader.biHeight=row;
m_pBIH->bmiHeader.biWidth=col;
for(int j=0;j<256;j++)
{
m_pBIH->bmiColors[j].rgbBlue=j;
m_pBIH->bmiColors[j].rgbGreen=j;
m_pBIH->bmiColors[j].rgbRed=j;
m_pBIH->bmiColors[j].rgbReserved=0;
}
b_LoadData=TRUE;
free(tempdata);
f_image.Close();
return TRUE;
}
无聊客
2006-08-21
打赏
举报
回复
GetObject
goodboyws
2006-08-21
打赏
举报
回复
CreateDIBSection
VC将H
BITMAP
转换成BMP位图文件的各个部分
VC将H
BITMAP
转换成BMP位图文件的各个部分
利用H
BITMAP
打开bmp位图
利用H
BITMAP
打开bmp位图
halcon和c++之间的
图像
数据
转换
目的是在c++的平台(vs2010)上调用halcon的算子进行
图像
处理,当找不到合适的halcon算子时,需要自己对
图像
数据
直接进行操作。此时,需要把halcon对象(HObject)
中
的
图像
像素
数据
读出来,处理完毕后再写回halcon对象(HObject)。 下面的代码在c++
中
调用halcon算子读图、处理、显示。同时也读取
图像
RGB像素
数据
,把其
中
的蓝色分量置0。再把修改后的
数据
写会halcon对象(HObject)。
【代码】VS2010 用CxImage读入各种图片格式后在内存
中
转换为H
BITMAP
位图Demo
VS2010 用CxImage读入各种图片格式后在内存
中
转换为H
BITMAP
位图Demo
Visual C++
中
实现对
图像
数据
的读取显示
Visual C++
中
实现对
图像
数据
的读取显示 Visual C++
中
实现对
图像
数据
的读取显示
图形处理/算法
19,473
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章