一个很简单的问题
下面这个函数是把一张图片截成指定大小的图片,不过怎么也得不到,请高手指定那里错了?
BOOL SaveDIBAsSize(LPCSTR lpszDestName, LPCSTR lpszSourceName, DWORD dwWidth, DWORD dwHigh)
{
CFile file;
if(!file.Open(lpszSourceName, CFile::modeRead))
{
return FALSE;
}
BITMAPFILEHEADER bmpFileHead;
BITMAPINFOHEADER bmpInfoHead;
file.Read(&bmpFileHead, sizeof(bmpFileHead));
file.Read(&bmpInfoHead, sizeof(bmpInfoHead));
bmpFileHead.bfSize = 54+dwWidth * dwHigh;//8位,所以一个象素就是一个字节.
const int ImageSize = dwWidth * dwHigh;
BYTE* pImageSize = new BYTE[ImageSize];
memset(pImageSize, 0, ImageSize);
DWORD Seekto = (bmpInfoHead.biHeight - dwHigh)/2-1 + (bmpInfoHead.biWidth - dwWidth)/2;
file.Seek(Seekto, CFile::current);//移动到要读的地方
BYTE *p = pImageSize;
for(DWORD i = 0; i < dwHigh; i++)//逐行把数据读进去
{
file.Read(p, dwWidth);
p += dwWidth;
file.Seek(bmpInfoHead.biWidth - dwWidth, CFile::current);
}
//改变文件信息的内容
bmpInfoHead.biWidth = dwWidth;
bmpInfoHead.biHeight = dwHigh;
bmpInfoHead.biSize = dwWidth * dwHigh;
file.Close();
if(!file.Open(lpszDestName, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate))
{
delete []pImageSize;
return FALSE;
}
file.Write(&bmpFileHead, sizeof(bmpFileHead));
file.Write(&bmpInfoHead, sizeof(bmpInfoHead));
file.WriteHuge(pImageSize, ImageSize);
file.Close();
delete []pImageSize;
return TRUE;
}