| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 598 人关注过本帖
标题:C++如何读取内存中的BMP,请给一个完整的代码片断,下边自己写的,摸不着头脑
只看楼主 加入收藏
newsblue
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-5-29
结帖率:0
收藏
 问题点数:0 回复次数:3 
C++如何读取内存中的BMP,请给一个完整的代码片断,下边自己写的,摸不着头脑
BITMAPFILEHEADER bmpHeader;
BITMAPINFOHEADER bmpinfoheader;

bmpHeader.bfType=0x4d42;
bmpHeader.bfSize=100;
bmpHeader.bfReserved1=0;
bmpHeader.bfReserved2=0;
bmpHeader.bfOffBits=0x36;

bmpinfoheader.biSize=sizeof(BITMAPINFOHEADER);
bmpinfoheader.biWidth=512;//512X512
bmpinfoheader.biHeight=512;
bmpinfoheader.biPlanes=0x1;
bmpinfoheader.biBitCount=0x18;
bmpinfoheader.biCompression=0;
bmpinfoheader.biSizeImage=0;
bmpinfoheader.biXPelsPerMeter=0;
bmpinfoheader.biYPelsPerMeter=0;
bmpinfoheader.biClrUsed=0;
bmpinfoheader.biClrImportant=0;

std::fstream g("c:\\1.dcm",std::ios::binary|std::ios::in);
char *pchBuf = NULL;
g.seekg (0, g.end);
long length = g.tellg();
pchBuf = (char*) malloc(length);
g.seekg (0, g.beg);
g.read((char*)pchBuf,length);

char *bmpinfo = NULL;
char *pchBuf3 = NULL;
bmpinfo = (char*) malloc(sizeof(bmpHeader) + sizeof(bmpinfoheader));

pchBuf3 = (char*) malloc(512*512*3);//rows*cols*3colors

memcpy(bmpinfo,&bmpHeader,sizeof(bmpHeader));
memcpy(bmpinfo + sizeof(bmpHeader),&bmpinfoheader,sizeof(bmpinfoheader));

unsigned char cc[512*3]={0};
unsigned char bb[3]={0};
int i,j;
for(i=0;i<=512 - 1;i++)
{
for(j=2;j<=512*2;j=j+2)
{
unsigned short int aa;
memcpy((char*)&aa,pchBuf+length-j,2);
//unsigned char bb[]={(0xff-aa/0xff)/1.5,(0xff-aa/0xff)/1.5,(0xff-aa/0xff)/1.5};
unsigned char bb[]={aa/0xff,aa/0xff,aa/0xff};
memcpy((char*)&cc + sizeof(cc) - j/2*sizeof(bb),bb,sizeof(bb));
}
memcpy(pchBuf3 + i * sizeof(cc),cc,sizeof(cc));
}//现在,bmpinfo里边有bmp头部信息,pchBuf3里有bmp的像素数据
HANDLE h;
HDC hdc,dc;
BITMAP bmp;
//下边乱写的,如何把内存总的BMP显示在屏幕上
hdc=GetDC(hwnd);//得到窗口的DC(hWnd是窗口句柄)
dc=CreateCompatibleDC(hdc);//得到与窗口DC兼容的DC
//GetDIBits(dc,0,0,512,pchBuf3,(BITMAPINFO*)bmpinfo,DIB_RGB_COLORS);
//SetDIBits(hdc,0,0,512,pchBuf3,(BITMAPINFO*)bmpinfo,DIB_RGB_COLORS);
SelectObject(dc,h);//把得到的DC与图片句柄关联起来
BitBlt(hdc,0,0,512,512,dc,0,0,SRCCOPY);//把图片画在窗体上
//DeleteDC(dc);//删除CreateCompatibleDC得到的图片DC
//ReleaseDC(hwnd,hdc);//释放GetDC得到的DC
//DeleteObject(h);//删除内存中的位图
搜索更多相关主题的帖子: 如何 
2013-08-03 09:43
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
\1.dcm来填充bmp?不了解dcm格式的文件

你调试一下,判断一下每个函数的返回值和错误码,跟踪一下就行了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-03 10:02
newsblue
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-5-29
收藏
得分:0 
回复 2楼 yuccn
回版主,DCM不是重点,你就当有随便一个BMP在内存里边就好,本人图形方面菜鸟,问题多多,还希望大家赐教
2013-08-03 10:53
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
代码在公司git上,家里连VS都木有
而且我的图形引擎是SKIA,对你不会有帮助的,友情飘过

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-03 10:57
快速回复:C++如何读取内存中的BMP,请给一个完整的代码片断,下边自己写的,摸不着 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064140 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved