在文档类中重载OnOpenDocument((LPCTSTR lpszPathName)函数,根据bmp图象的格式依次读入文件头,位图信息头,调色板信息(通过创建逻辑调色板,将位图调色板的信息复制到逻辑调色板,然后再实现逻辑调色板),位图数据;
解决方案 »
- 工作近两年了,感觉好郁闷呀!
- coding_hello--线程注入目的进程中的问题(好像是堆栈的问题)
- CFileDialog
- CButton的定义问题!急~~~
- 如何解决GIF失真?请教图像处理高手!!!
- 兄弟们,做一份调查,请大家谈谈关于自已想开发什么样的软件,以及市场上会需要什么软件(内详)
- 菜鸟问题:关于回车
- 我有一基于CScrollView的MyView, 当显示的文本较多时,下拉滚动条数度快时,会自动弹到顶端,如何解决
- 我用open语句打开一个文本文件,在到达文件尾时如何将指针移到开头
- vc中增样调用activex dll ,请写出详细一些的步骤,多谢!
- 小弟一点编程基础没有,想学好vc+,求大虾提供几本好的入门书、实例书(很重要)、还有比较全的宝典类参考书,谢谢!
- 程序重复定义 问题
{
BYTE *lpBitmap,*lpBits;
BITMAPINFOHEADER *pInfo;
int nWidth,nHeight,nBitCount,nLen,nByteWidth;
nLen=pf->GetLength();
RGBQUAD *pPalette;
unsigned int PaletteSize; lpBitmap=new BYTE[nLen];
pf->Read(lpBitmap,nLen);
if (lpBitmap[0]!='B'&&lpBitmap[1]!='M')
{
//AfxMessageBox("非位图文件");
delete[] lpBitmap;
return FALSE;
}
pInfo=(BITMAPINFOHEADER *)(lpBitmap+sizeof(BITMAPFILEHEADER));
nWidth=pInfo->biWidth;
nHeight=pInfo->biHeight;
nBitCount=pInfo->biBitCount;
nByteWidth=BYTE_PER_LINE(nWidth,nBitCount);
switch (nBitCount)
{
case 24:
if (m_lpBits) delete[] m_lpBits;
if (m_lpPalette) delete[] m_lpPalette;
m_lpPalette=NULL;// nByteWidth=nWidth*3;
// if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4);
m_lpBits=new BYTE[nByteWidth*nHeight];
lpBits=(BYTE *)pInfo+sizeof(BITMAPINFOHEADER);
memcpy(m_lpBits,lpBits,nByteWidth*nHeight);
break;
case 8:
case 4:
// nByteWidth=int ((nBitCount/8.0)*nWidth);
// if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4);
PaletteSize=1<<pInfo->biBitCount;
if (pInfo->biClrUsed!=0 && pInfo->biClrUsed<PaletteSize) PaletteSize=pInfo->biClrUsed;
lpBits=lpBitmap+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
pPalette=(RGBQUAD *)lpBits;
lpBits+=sizeof(RGBQUAD)*PaletteSize; if (m_lpBits) delete[] m_lpBits;
m_lpBits=new BYTE[nByteWidth*nHeight];
memcpy(m_lpBits,lpBits,nByteWidth*nHeight); if (m_lpPalette) delete[] m_lpPalette;
m_lpPalette=new BYTE[sizeof(RGBQUAD)*PaletteSize];
memcpy(m_lpPalette,pPalette,sizeof(RGBQUAD)*PaletteSize);
break;
default: //AfxMessageBox("无效位图");
delete[] lpBitmap;
return FALSE;
}
delete[] lpBitmap;
m_nBitCount=nBitCount;
m_nWidth=nWidth;
m_nHeight=nHeight;
return TRUE;
}