VC++,如何把位图表示法 内存文件读到内存供使用

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
读取位图文件、显示位图文件、保存位图文件
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
VC++】读取位图文件、显示位图文件、保存位图文件
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口VC++读取位图入门例子_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VC++读取位图入门例子
&&不用多说,看文章!
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩8页未读,
定制HR最喜欢的简历
你可能喜欢vc++中怎么判断读取的是否是位图?_百度知道
vc++中怎么判断读取的是否是位图?
我有更好的答案
以二进制文件形式读取位图文件,最开始的两个字节是&BM&。这就是位图的标志。
BITMAPFILEHEADER
//该句定义了一个文件头if(bmflh.bfType!=19778)
//那文件头的类别怎么不等于一串数字啊
MessageBox(&给图不是位图文件&);
}上面一串数字是什么意思?
字符&BM&的十六进制ASCII码是0x4D42,转成十进制就是19778。.
采纳率:42%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。VC中如何直接生成BMP位图文件???
[问题点数:50分,结帖人wendysen]
VC中如何直接生成BMP位图文件???
[问题点数:50分,结帖人wendysen]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2009年1月 VC/MFC大版内专家分月排行榜第三
匿名用户不能发表回复!|【高分求救】VC++下如何载入一张位图并获取该位图的像素值_百度知道
【高分求救】VC++下如何载入一张位图并获取该位图的像素值
MFC菜鸟一名,求高手指点在VC++下如何通过MFC载入一张位图,并且能够获得该位图每个像素点的值。要求有具体的例子示范该如何调用某些函数之类时间比较急,希望能在1月10晚上10点之前求高手指点,答案采纳后另有100分追加。不胜感激
我有更好的答案
HBITMAP hBmp = (HBITMAP)LoadImage( NULL , &z:\\bg4.bmp& , IMAGE_BITMAP , 0 , 0 , LR_CREATEDIBSECTION | LR_LOADFROMFILE); if (hBmp != NULL) {
BITMAP bmp = {0};
int ret = GetObject( hBmp , sizeof(BITMAP) , &bmp );
TRACE( &Width = %d Height = %d BitsPerPixel = %d\n& , bmp.bmWidth , bmp.bmHeight , bmp.bmBitsPixel );
BYTE* pPixel = (BYTE*)bmp.bmB
//指向BMP像素的指针
int x = 1439 , y = 899;
//指定要获取像素的坐标
规定图片左上角坐标为0,0
BYTE *pOffset = pPixel + (bmp.bmHeight - 1) * bmp.bmWidthB
//指向最后一行像素数据
(pOffset -
y * bmp.bmWidthBytes) + x * bmp.bmBitsPixel / 8; //指向指定像素位置
DWORD rgb = 0;
memcpy( &rgb , pOffset , bmp.bmBitsPixel / 8 );
TRACE( &(x = %d y = %d) = %u\n& , x , y , rgb );
DeleteObject( hBmp );
hBmp = NULL;
ZeroMemory( &bmp , sizeof(bmp) ); }上面代码里的rgb就是你要的像素了如果你是在对话框之类的处理的话可以用类似下面的代码实现CDC* pDc = GetDC(); POINT pt.x = 10; pt.y = 10; pDc-&SetPixel( pt , RGB(255,0,0) );
载入位图可以用LoadBitmap()有两种重载形式BOOL LoadBitmap( LPCTSTR lpszRecourceName );BOOL LoadBitmap( UINT nIDResource );参数: lpszResourceName 指向一个包含了位图资源名字的字符串(该字符串以null结尾)。
nIDResource 指定位图资源中资源的ID号。 获取位图可以用GetBitmapBits()DWORD GetBitmapBits( DWORD dwCount, LPVOID lpBits )CBitmap::GetBitmapint GetBimap( BITMAP* pBitMap );返回值:调用成功时返回非零值,否则为0。参数: pBitMap 指向BITMAP结构的一个指针,不能为NULL。
说明:本函数用于查看CBitmap对象的信息。返回的信息存放在pBitMap指向的BITMAP结构中。BITMAP结构如下:BITMAP结构具有如下形式:typedef struct tagBITMAP{
LPVOID bmB}
BITMAP;BITMAP结构定义了逻辑位图的高,宽,颜色格式和位值。成员: bmType 指定了位图的类型。对于逻辑位图,这个成员必须为0。
bmWidth 指定了位图的宽度,以像素为单位。宽度必须大于0。
bmHeight 指定了位图的高度,以扫描行为单位。高度必须大于0。
bmWidthBytes 指定了每个扫描行中字节的数目。这个值必须是个偶数,因为图形设备接口(GDI)假定位图中的位值构成一个整数(2字节)数组。换句话说,bmWidthBytes*8必须是16的倍数,大于或等于bmWidth与bmBitsPixel相乘所得的值。
bmPlanes 指定了位图中颜色平面的数目。
bmBitsPixel 指定了每个位平面中用于定义一个像素所需的颜色位数。
bmBits 指向位图中位值的位置。bmBits成员必须是一个指向单字节数组的长指针。
注释:现在使用的位图格式有单色的和彩色的。单色的位图使用每个位平面一位的格式。每个扫描线是16的倍数。对于一个高度为n的单色位图,扫描线是按照如下方式组织的:Scan 0Scan 1...Scan n-2Scan n-1单色设备上的像素不是黑就是白。如果位图中对应的位是1,则像素就被打开(白)。如果对应的位是0,则像素被关闭(黑)。所有具有RC_BITBLT位的设备都支持位图,该位是在CDC::GetDeviceCaps成员函数的RASTERCAPS索引中设置的。每个设备都有它自己的颜色格式。为了在不同的设备间传递位图,使用Windows的GetDIBits和SetDIBits函数。给你举个例子:CBitmap m_BITMAP *pBitMm_bmp.LoadBitmap(&d:\\图片\\示例图片\\flower.bmp&);//加载位图m_bmp.GetBitmap(pBitMap);//获取位图信息int i,j;DWORD color=pBitMap-&bmBits[i*pBitMap-&bmHeight+pBitMap-&bmWidth];//访问第i行第j列像素点的颜色值
看下bitmap的文件结构就可以了。。vc++貌似有个CImage的类的,可以load一张图并可以获得每个像素。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 无效的位图文件 的文章

 

随机推荐