社区
图形处理/算法
帖子详情
如何访问HBITMAP中的图像数据
zephyr007
2006-08-21 02:38:49
如何访问HBITMAP中的图像数据,希望能够将其中的图像数据取出来进行其他的处理,至于格式可以是RGBRGBRGB...或RRRRRRGGGGGGBBBBBB等都无所谓
...全文
443
7
打赏
收藏
如何访问HBITMAP中的图像数据
如何访问HBITMAP中的图像数据,希望能够将其中的图像数据取出来进行其他的处理,至于格式可以是RGBRGBRGB...或RRRRRRGGGGGGBBBBBB等都无所谓
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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位图文件的各个部分
这样的转换可以方便地保存或传输
图像
数据
,并且能够支持不同的颜色深度,如1BIT、4BIT、8BIT、16BIT、24BIT、32BIT。 #### 二、关键知识点解析 **1. H
BITMAP
与BMP文件格式简介** - **H
BITMAP
**: 在Windows系统
中
...
利用H
BITMAP
打开bmp位图
`LoadImage`函数可以加载系统资源或文件
中
的
图像
,而`CreateDIBSection`则允许直接创建一个与特定设备兼容的位图,适合处理自定义格式的
数据
。 4. **LoadImage函数**: `LoadImage`函数的原型如下: ```c++ ...
Bitmap
保存为文件
在Windows编程
中
,
Bitmap
(位图)是一种常见的
图像
数据
存储格式,用于在屏幕上显示和处理图形。`H
BITMAP
`是Windows GDI(Graphics Device Interface)
中
的一个句柄类型,代表了一个位图对象。本篇文章将详细介绍如何...
halcon和c++之间的
图像
数据
转换
这个例子展示了如何在C++与HALCON之间进行
图像
数据
的转换和操作。在实际应用
中
,你可以根据需要修改这部分代码,以执行任何自定义的
图像
处理算法。例如,你可以添加其他滤波操作,或者改变红色和绿色通道的像素值。...
【代码】VS2010 用CxImage读入各种图片格式后在内存
中
转换为H
BITMAP
位图Demo
CXImage库提供了一个方便的方法,可以将
图像
数据
转换为Windows GDI(图形设备接口)的H
BITMAP
句柄。这可以通过调用`GetH
BITMAP
()`函数完成: ```cpp H
BITMAP
h
Bitmap
= image.GetH
BITMAP
(); ``` `h
Bitmap
`现在...
图形处理/算法
19,466
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章