解决方案 »
- 求 windows画图程序代码
- GetModuleHandle(0)的真正意思?
- 做vc网络数据库项目的问题,希望能给个思路,谢谢!
- IOCP 中DisconnectEx的问题??
- 麻烦大家给讲讲什么是堆分配,还有堆栈…………
- 如何能保持HTTP连接,就是长连接?
- 关于CLASSVIEW的问题?
- 急,急,急,急死了。有谁知道,oicq的报文格式?netmeeting的报文格式?
- 如何让编辑框只能输入一个字符
- 有谁知道Outlook在使用hotmail油箱的时候使用的是HTTPMail协议,那里有相关资料?
- 怎样在整个帖子内搜索关键字
- WaitForSingleObject 造成CPU占用率升高
另外不太能跟上你读取信息的逻辑。比如:PBMINOW=(BITMAPINFO *)new BYTE[Header.bfOffBits-14];
Header.bfOffBits-14是什么意思? 如果是24位bitmap, 这个位置指向BITMAPINFOHEADER.biXPelsPerMeter;的一半。
如果BITMAPINFOHEADER.biCompression == BI_BITFIELDS,16位bitmap的话这个位置指向BITMAPINFOHEADER.biClrImportant一半,32位bitmap的话这个位置指向Alpha mask的一半。 如果是8位bitmap的话这个位置指向调试板倒数颜色中某个的一半。最终结果Header.bfOffBits-14=sizeof(BITMAPFILEHEADER)+part sizeof(BITMAPINFO). 完全无法理解你分配这么一块奇怪大小内存的目的。
LR_CREATEDIBSECTION | LR_LOADFROMFILE
CString CSPath="G:\\20100000.bmp";
BITMAPINFO * PBMINOW=NULL;
BYTE *PBNOW=NULL;
BITMAPFILEHEADER Header;if(CFImage.Open(CSPath,CFile::modeReadWrite))
{
CFImage.Read(&Header,sizeof(BITMAPFILEHEADER)); PBMINOW=(BITMAPINFO *)new BYTE[Header.bfOffBits-sizeof(BITMAPFILEHEADER)];
CFImage.Read(PBMINOW,Header.bfOffBits-sizeof(BITMAPFILEHEADER));
CFImage.Seek(Header.bfOffBits,CFile::begin); int sz = PBMINOW->bmiHeader.biHeight;
if( sz < 0 ) sz = -sz; sz *= PBMINOW->bmiHeader.biWdth;
switch(PBMINOW->bmiHeader.biBitCount)
{
case 1: sz = (sz+7)/8; break;
case 4: sz = (sz+1)/2; break;
case 16: sz *= 2; break;
case 24: sz *= 3; break;
case 32: sz *= 4; break;
} sz = (sz+3) & 0xFFFFFFFC; PBNOW = new BYTE[sz];
CFImage.Read(sz);
CFImage.Close();
}// 进行DIB转换
HBITMAP HBNOW = CreateDIBitmap(NULL,(BITMAPINFOHEADER*)PBMINOW, CBM_INIT, PBNOW, (BITMAPINFO*)PBMINOW, DIB_RGB_COLORS);