社区
图形处理/算法
帖子详情
如何访问HBITMAP中的图像数据
zephyr007
2006-08-21 02:38:49
如何访问HBITMAP中的图像数据,希望能够将其中的图像数据取出来进行其他的处理,至于格式可以是RGBRGBRGB...或RRRRRRGGGGGGBBBBBB等都无所谓
...全文
453
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
Windows 系统将剪贴板图片从DIB格式转换为PNG格式
DIB(Device-Independent
Bitmap
)是Windows操作系统
中
用于表示位图
图像
的标准格式。与设备相关的位图不同,DIB包含了颜色表信息,可以在不同设备上保持一致的显示效果。剪贴板
中
的DIB格式通常以CF_DIB或CF_DIBV5位图信息头(
BITMAP
INFOHEADER或
BITMAP
V5HEADER)颜色表(可选)位图
数据
。
易语言实现位图句柄与位图
数据
互转源码解析
很多人以为H
BITMAP
就是一个指向
图像
数据
的指针,其实大错特错 ❌。它更像是一张“门票”,是你进入Windows内核图形世界的入场券。这张票本身不包含任何画面内容,只是个编号——操作系统拿着这个编号去查它的GDI对象表,才能找到对应的内存资源。这就引出了一个关键设计思想:资源隔离与安全控制。如果应用程序可以直接
访问
显存或帧缓冲区,那恶意程序就能随意读取屏幕内容,甚至篡改其他窗口的画面。
Windows H
BITMAP
转BMP文件:跨位深转换与GetDIBits实战指南
在Windows图形编程
中
,位图(
Bitmap
)是
图像
处理的基础
数据
结构,它分为设备相关位图(DDB)和设备无关位图(DIB)两种核心类型。设备相关位图(如H
BITMAP
)的像素格式依赖于具体显示设备,而设备无关位图(如BMP文件)则具有标准化的文件结构,可在不同系统间移植。其转换原理关键在于通过GDI的GetDIBits API,在内存
中
将H
BITMAP
的像素
数据
按目标格式重组,并构建包含文件头、信息头和像素
数据
阵列的完整BMP结构。这项技术的核心价值在于实现
图像
数据
的标准化输出与精确位深控制,广泛应用于
使用Get
Bitmap
Bits和Set
Bitmap
Bits加速
图像
处理
通过直接
访问
位图的像素
数据
,我们可以避免不必要的内存复制和
访问
开销,从而提高
图像
处理的效率。在上面的代码
中
,我们首先调用GetObject函数获取位图对象的信息,包括宽度、高度和每行的字节数等。通过使用Get
Bitmap
Bits和Set
Bitmap
Bits函数,我们可以直接
访问
位图的像素
数据
,避免了频繁的读取和写入操作,从而提高了
图像
处理的效率。在这个例子
中
,我们使用了一个简单的灰度化公式,将每个像素的红、绿、蓝分量的加权平均值作为灰度值,并将灰度值赋给每个分量,从而将
图像
转换为灰度
图像
。
深入GDI
图像
显示
深入GDI
图像
显示 摘 要:本文首先给出了一种结合了DIB和DDB两种位图优点的
图像
显示方法,其次对GDI函数的高级应用,如透明位图显示、
图像
旋转显示、
图像
镜像显示进行了研究。 关键词:GDI
图像
显示,特殊GDI函数的应用,透明位图显示,
图像
几何变换显示
图像
信息是人类认识世界的重要知识来源,人类获得的70%以上的信息来自于眼睛摄取的丰富和真切的
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章