void CMyProgramView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB像素指针
CDibImage kc; // 定义CDibImage的一个对象
CCoding clsCoding; // 编码类CCoding生成的一个对象
CDibImage dib; // 定义CDibImage的一个对象
BITMAPINFO *Bitmap = NULL; // 定义一个指向位图信息头(和调色板)的指针
ULONG Length = 0; // 位图大小
CFile File;
CString Filename="D:\\picture.bmp";
Capture(pDlg->m_VFWImageProc, Filename); // 调用Capture函数进行图像捕获
//------------
CFile file(Filename,CFile::modeRead); // 捕获到的文件
HDIB hDIB = dib.ReadDIBFile(file);// 调用CDibImage类中的ReadDIBFile函数获得图像句柄
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 找到DIB图像象素起始位置
lpDIBBits = dib.FindDIBBits(lpDIB);
// 判断是否是24-bpp位图
if (dib.DIBNumColors(lpDIB) != 0)
{
MessageBox("目前只支持24位色位图的状态显示!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) hDIB);
return;
} dib.Deal(lpDIBBits,dib.DIBWidth(lpDIB),dib.DIBHeight(lpDIB)); file.Close();
static int bb=1;
CString strJPG;// 调用SaveJPG()函数对处理后的图像进行JPEG格式的压缩编码,并保存到f:盘下
strJPG.Format("D:\\jpgs\\code%d.jpg",bb++); clsCoding.SaveJPG(lpDIBBits,strJPG, dib.DIBWidth(lpDIB),dib.DIBHeight(lpDIB)); //自己修改的
// 调用UDPSendJPG函数使用UDP协议发送编码后的雷达图像
// UDPSendJPG();
::GlobalUnlock((HGLOBAL) hDIB); // 解除锁定
// echo1.Close(); CFile file1;
if( !file1.Open(strJPG, CFile::modeRead))//打开jpg文件
return ;
int nSize = file1.GetLength(); //先得到jpg文件长度
BYTE * pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存
if (file1.Read(pBuffer, nSize) > 0 ) //把jpg文件读到pBuffer(堆上申请一块内存)
{ // +----------------------------------------------
BYTE *pBuf = pBuffer; ///下面这一大段是把pBuffer里的jpg数据放到库中
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset->AddNew();
CTime time=CTime::GetCurrentTime(); //获取系统日期 ;
CString mdate,mtime;
mdate=time.Format("%Y-%m-%d");
mtime=time.Format("%H:%M:%S");
m_pRecordset->PutCollect("time",_variant_t(mtime));
m_pRecordset->PutCollect("date",_variant_t(mdate));//服务器数据库时间格式不一样
m_pRecordset->PutCollect("point",_variant_t(strXin));
m_pRecordset->PutCollect("range",_variant_t(strRange));
m_pRecordset->PutCollect("sea",_variant_t(strSea));
m_pRecordset->PutCollect("tune",_variant_t(strTune));
m_pRecordset->PutCollect("gain",_variant_t(strGain));
m_pRecordset->PutCollect("rain",_variant_t(strRain));
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)nSize; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("jpg")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
//(pView->m_Pic.LoadPictureData(pBuffer, nSize));//接作调用函数读pBuffer的jpg数据准备显示
delete [] pBuffer; //删掉堆上申请的那一块内存
pBuf=0; //以防二次乱用
}
file1.Close();
CScrollView::OnTimer(nIDEvent);
}
程序运行一段时间后就会出现内存不足的提示,大家帮忙看看
{
// TODO: Add your message handler code here and/or call default
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB像素指针
CDibImage kc; // 定义CDibImage的一个对象
CCoding clsCoding; // 编码类CCoding生成的一个对象
CDibImage dib; // 定义CDibImage的一个对象
BITMAPINFO *Bitmap = NULL; // 定义一个指向位图信息头(和调色板)的指针
ULONG Length = 0; // 位图大小
CFile File;
CString Filename="D:\\picture.bmp";
Capture(pDlg->m_VFWImageProc, Filename); // 调用Capture函数进行图像捕获
//------------
CFile file(Filename,CFile::modeRead); // 捕获到的文件
HDIB hDIB = dib.ReadDIBFile(file);// 调用CDibImage类中的ReadDIBFile函数获得图像句柄
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 找到DIB图像象素起始位置
lpDIBBits = dib.FindDIBBits(lpDIB);
// 判断是否是24-bpp位图
if (dib.DIBNumColors(lpDIB) != 0)
{
MessageBox("目前只支持24位色位图的状态显示!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) hDIB);
return;
} dib.Deal(lpDIBBits,dib.DIBWidth(lpDIB),dib.DIBHeight(lpDIB)); file.Close();
static int bb=1;
CString strJPG;// 调用SaveJPG()函数对处理后的图像进行JPEG格式的压缩编码,并保存到f:盘下
strJPG.Format("D:\\jpgs\\code%d.jpg",bb++); clsCoding.SaveJPG(lpDIBBits,strJPG, dib.DIBWidth(lpDIB),dib.DIBHeight(lpDIB)); //自己修改的
// 调用UDPSendJPG函数使用UDP协议发送编码后的雷达图像
// UDPSendJPG();
::GlobalUnlock((HGLOBAL) hDIB); // 解除锁定
// echo1.Close(); CFile file1;
if( !file1.Open(strJPG, CFile::modeRead))//打开jpg文件
return ;
int nSize = file1.GetLength(); //先得到jpg文件长度
BYTE * pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存
if (file1.Read(pBuffer, nSize) > 0 ) //把jpg文件读到pBuffer(堆上申请一块内存)
{ // +----------------------------------------------
BYTE *pBuf = pBuffer; ///下面这一大段是把pBuffer里的jpg数据放到库中
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset->AddNew();
CTime time=CTime::GetCurrentTime(); //获取系统日期 ;
CString mdate,mtime;
mdate=time.Format("%Y-%m-%d");
mtime=time.Format("%H:%M:%S");
m_pRecordset->PutCollect("time",_variant_t(mtime));
m_pRecordset->PutCollect("date",_variant_t(mdate));//服务器数据库时间格式不一样
m_pRecordset->PutCollect("point",_variant_t(strXin));
m_pRecordset->PutCollect("range",_variant_t(strRange));
m_pRecordset->PutCollect("sea",_variant_t(strSea));
m_pRecordset->PutCollect("tune",_variant_t(strTune));
m_pRecordset->PutCollect("gain",_variant_t(strGain));
m_pRecordset->PutCollect("rain",_variant_t(strRain));
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)nSize; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("jpg")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
//(pView->m_Pic.LoadPictureData(pBuffer, nSize));//接作调用函数读pBuffer的jpg数据准备显示
delete [] pBuffer; //删掉堆上申请的那一块内存
pBuf=0; //以防二次乱用
}
file1.Close();
CScrollView::OnTimer(nIDEvent);
}
程序运行一段时间后就会出现内存不足的提示,大家帮忙看看
写个大fat函数很蛋疼.