BOOL CHVDlgSaveDlg::SaveBMPFile(LPCSTR lpFileName, BYTE *pImageBuffer1)
{
char * pImageBuffer=new char[1236*1628*3];
memcpy(pImageBuffer,pImageBuffer1,1236*1628*3);
int nLineBytes=1628*3;
BOOL bRVal = TRUE;
DWORD dwBytesRead = 0;
DWORD dwSize = 0;
BITMAPFILEHEADER bfh = {0};
int nTable = 0;
DWORD dwImageSize = 0;
int nxx=nx;
int nyy=ny;
unsigned char * framforcutTemp=frameforcut;
//**************************裁剪以目标形心为中心的460*360大小的图像************
int temint=0;
if((nxx>=230&&nxx<1628-230)&&(nyy>=180&&nyy<1236-180))
{
for (long y=0; y<1236;y++)
{
for (long x=0;x<1628;x++)
{
if( ((x>=nxx-230)&&(x<nxx+230))&&((y>=nyy-180)&&(y<nyy+180)))
{
*framforcutTemp=*(pImageBuffer+ nLineBytes*y+x*3);
framforcutTemp++;
*framforcutTemp=*(pImageBuffer+ nLineBytes*y+x*3+1);
framforcutTemp++;
*framforcutTemp=*(pImageBuffer+nLineBytes*y+x*3+2);
framforcutTemp++;
temint++;
}
}
}
// CString temstr;
// temstr.Format("Temint=%d",temint);
// AfxMessageBox(temstr);
//frameforcut = frameforcut-temint*3 ; //指针移到图像开始的地方
}
else
{
free(pImageBuffer);
return false;
}
//***********************************************************************************************
dwImageSize = WIDTH_BYTES(460 * 24) * 360;
if (dwImageSize <= 0)
{
bRVal = FALSE;
}
else
{
bfh.bfType = (WORD)'M' << 8 | 'B';
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nTable * sizeof(RGBQUAD);
bfh.bfSize = bfh.bfOffBits + dwImageSize;
bfh.bfReserved1 = 0 ;
bfh.bfReserved2 = 0 ;
}// CString temstrr;
// temstrr.Format("nxx=%d,nyy=%d",nxx,nyy);
// AfxMessageBox(temstrr); //******************************************************
BITMAPINFOHEADER pBmpInfo;
pBmpInfo.biBitCount = 24;/* 每个像素的位数,如256色,8bit */
pBmpInfo.biClrImportant = 0 ;
pBmpInfo.biClrUsed = 0 ;
pBmpInfo.biCompression = BI_RGB;
pBmpInfo.biPlanes = 1 ;
pBmpInfo.biSizeImage = 360*460*3;
pBmpInfo.biXPelsPerMeter = 0;
pBmpInfo.biYPelsPerMeter = 0;
pBmpInfo.biHeight = 360 ;
pBmpInfo.biWidth = 460 ;
pBmpInfo.biSize = 40 ;
//***********************************************************
HANDLE hFile = ::CreateFile(lpFileName,
GENERIC_WRITE ,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE)
{
bRVal = FALSE;
}
else
{
dwSize = sizeof(BITMAPFILEHEADER);
::WriteFile(hFile, &bfh, dwSize, &dwBytesRead, NULL );
dwSize = sizeof(BITMAPINFOHEADER) + nTable * sizeof(RGBQUAD);
::WriteFile(hFile, &pBmpInfo, dwSize, &dwBytesRead, NULL );
dwSize = dwImageSize;
WriteFile( hFile, frameforcut, dwSize, &dwBytesRead, NULL );
CloseHandle(hFile);
}
// delete [] pImageBuffer ;
// if(frameforcut )
//delete [] frameforcut ;
// frameforcut=NULL;
free(frameforcut);
free(pImageBuffer);
return bRVal ;
}
{
char * pImageBuffer=new char[1236*1628*3];
memcpy(pImageBuffer,pImageBuffer1,1236*1628*3);
int nLineBytes=1628*3;
BOOL bRVal = TRUE;
DWORD dwBytesRead = 0;
DWORD dwSize = 0;
BITMAPFILEHEADER bfh = {0};
int nTable = 0;
DWORD dwImageSize = 0;
int nxx=nx;
int nyy=ny;
unsigned char * framforcutTemp=frameforcut;
//**************************裁剪以目标形心为中心的460*360大小的图像************
int temint=0;
if((nxx>=230&&nxx<1628-230)&&(nyy>=180&&nyy<1236-180))
{
for (long y=0; y<1236;y++)
{
for (long x=0;x<1628;x++)
{
if( ((x>=nxx-230)&&(x<nxx+230))&&((y>=nyy-180)&&(y<nyy+180)))
{
*framforcutTemp=*(pImageBuffer+ nLineBytes*y+x*3);
framforcutTemp++;
*framforcutTemp=*(pImageBuffer+ nLineBytes*y+x*3+1);
framforcutTemp++;
*framforcutTemp=*(pImageBuffer+nLineBytes*y+x*3+2);
framforcutTemp++;
temint++;
}
}
}
// CString temstr;
// temstr.Format("Temint=%d",temint);
// AfxMessageBox(temstr);
//frameforcut = frameforcut-temint*3 ; //指针移到图像开始的地方
}
else
{
free(pImageBuffer);
return false;
}
//***********************************************************************************************
dwImageSize = WIDTH_BYTES(460 * 24) * 360;
if (dwImageSize <= 0)
{
bRVal = FALSE;
}
else
{
bfh.bfType = (WORD)'M' << 8 | 'B';
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nTable * sizeof(RGBQUAD);
bfh.bfSize = bfh.bfOffBits + dwImageSize;
bfh.bfReserved1 = 0 ;
bfh.bfReserved2 = 0 ;
}// CString temstrr;
// temstrr.Format("nxx=%d,nyy=%d",nxx,nyy);
// AfxMessageBox(temstrr); //******************************************************
BITMAPINFOHEADER pBmpInfo;
pBmpInfo.biBitCount = 24;/* 每个像素的位数,如256色,8bit */
pBmpInfo.biClrImportant = 0 ;
pBmpInfo.biClrUsed = 0 ;
pBmpInfo.biCompression = BI_RGB;
pBmpInfo.biPlanes = 1 ;
pBmpInfo.biSizeImage = 360*460*3;
pBmpInfo.biXPelsPerMeter = 0;
pBmpInfo.biYPelsPerMeter = 0;
pBmpInfo.biHeight = 360 ;
pBmpInfo.biWidth = 460 ;
pBmpInfo.biSize = 40 ;
//***********************************************************
HANDLE hFile = ::CreateFile(lpFileName,
GENERIC_WRITE ,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE)
{
bRVal = FALSE;
}
else
{
dwSize = sizeof(BITMAPFILEHEADER);
::WriteFile(hFile, &bfh, dwSize, &dwBytesRead, NULL );
dwSize = sizeof(BITMAPINFOHEADER) + nTable * sizeof(RGBQUAD);
::WriteFile(hFile, &pBmpInfo, dwSize, &dwBytesRead, NULL );
dwSize = dwImageSize;
WriteFile( hFile, frameforcut, dwSize, &dwBytesRead, NULL );
CloseHandle(hFile);
}
// delete [] pImageBuffer ;
// if(frameforcut )
//delete [] frameforcut ;
// frameforcut=NULL;
free(frameforcut);
free(pImageBuffer);
return bRVal ;
}
解决方案 »
- C# 怎么样? 散点分,复者有份。
- 如何把一个数组初始化为0,数组的元素是结构体,结构体里有类
- (讨论帖)CPU占用率
- VC ADO "using namespace ADODB" 错误求助
- 急,急,急,急本人用MS的函数FtpOpenFile,InternetReadFile函数出现问题
- 进程在win98中出现问题
- 请教,在VC里如何调用服务器上定义的对象?
- 高分请教各位高手:学习COM、DCOM应该从哪里开始??
- 一个只有成都的前辈才能回答的问题!!!(版主: TTL=100000)
- 请问这是一个什么错误!
- 关于CreateThread传参数的问题。
- 请问怎么向TreeControl里的内容添加响应函数??
经过单步调试后 :
出现的信息First-chance exception in HVDlgSave.exe: 0xC0000005: Access Violation.光标定位在:*framforcutTemp=*(pImageBuffer+ nLineBytes*y+x*3);找了大牛来,也没有解决,希望大家给点意见,不胜感激!