总说代码不够发现不了问题,现在问了又没人回,郁闷啊
不想看程序,看看我的注释和问题,请给点建议!!!
程序不是我写的,我读起来有点费劲,但是大概意思还是能看明白
我就是加了个参数改动了一下
BOOL SpinFilterDIB(HDIB hDIB,CArray4b* pArray4b/*=NULL*/)
{
unsigned* peArray = NULL;
if(pArray4b) peArray = new unsigned;
HDIB hDib = NULL;
HDIB hNewDib = NULL;
// we only convolute 24bpp DIB, so first convert DIB to 24bpp
WORD wBitCount = DIBBitCount(hDIB);
if (wBitCount != 24)
{
hNewDib = ConvertDIBFormat(hDIB, 24, NULL);
hDib = CopyHandle(hNewDib);
}
else
{
hNewDib = CopyHandle(hDIB);
hDib = CopyHandle(hDIB);
}
// process!
LPBYTE lpSrcDIB = (LPBYTE)GlobalLock(hDib);
LPBYTE lpDIB = (LPBYTE)GlobalLock(hNewDib);
LPBYTE lpInput = FindDIBBits(lpSrcDIB);
LPBYTE lpOutput = FindDIBBits(lpDIB);
int nWidth = DIBWidth(lpSrcDIB);
int nHeight = DIBHeight(lpSrcDIB);
BYTE *lpPoints=new BYTE[nWidth*nHeight];
ASSERT(lpPoints!=NULL);
//将图象数据取出为矩阵
GetPoints(nWidth,nHeight,lpInput,lpPoints,MEAN_TYPE);
int i,j;
//
//算法实现部分,就是处理矩阵lpPoints
//
delete peArray;
//将数据矩阵放到图象中
PutPoints(nWidth,nHeight,lpOutput,lpPoints);
delete lpPoints;
lpPoints = NULL;
// recover
DWORD dwSize = GlobalSize(hDib);
memcpy(lpSrcDIB, lpDIB, dwSize);
GlobalUnlock(hDib);
GlobalUnlock(hNewDib);
if (wBitCount != 24)
{
//?我很奇怪这,hNewDib指向还是有空间的,在没有释放的情况下赋值,旧的空间怎么办?是不是我看错了?
//是不是应该先释放?
hNewDib = ConvertDIBFormat(hDib, wBitCount, NULL);
lpSrcDIB = (LPBYTE)GlobalLock(hDIB);
lpDIB = (LPBYTE)GlobalLock(hNewDib);
dwSize = GlobalSize(hNewDib);
memcpy(lpSrcDIB, lpDIB, dwSize);
GlobalUnlock(hDIB);
GlobalUnlock(hNewDib);
}
else
{
lpSrcDIB = (LPBYTE)GlobalLock(hDIB);
lpDIB = (LPBYTE)GlobalLock(hDib);
dwSize = GlobalSize(hDib);
memcpy(lpSrcDIB, lpDIB, dwSize);
GlobalUnlock(hDIB);
GlobalUnlock(hDib);
}
// cleanup
GlobalFree(hDib);
GlobalFree(hNewDib);
// return
return TRUE;
}
我是这么使用它的
BOOL CDibPro::SpinFilter(CArray4b* pArray4b /*=NULL*/)
{
if (IsEmpty())
return FALSE;
//####m_hDib是类内的图象句柄,delete其实主要是释放它
if (!SpinFilterDIB(m_hDib,pArray4b))
return FALSE;
//return
return UpdateInternal();
}
问题!!!
我就很郁闷了,调用这个成员函数之前还可以delete对象(我用断点试了),调用之后就delete就出错!!!!!!!!!!!!!!!
我不知道这个函数那出问题了,郁闷,真是看不出来才问的?
程序不是我写的,我读起来有点费劲,但是大概意思还是能看明白
我就是加了个参数改动了一下
BOOL SpinFilterDIB(HDIB hDIB,CArray4b* pArray4b/*=NULL*/)
{
unsigned* peArray = NULL;
if(pArray4b) peArray = new unsigned;
HDIB hDib = NULL;
HDIB hNewDib = NULL;
// we only convolute 24bpp DIB, so first convert DIB to 24bpp
WORD wBitCount = DIBBitCount(hDIB);
if (wBitCount != 24)
{
hNewDib = ConvertDIBFormat(hDIB, 24, NULL);
hDib = CopyHandle(hNewDib);
}
else
{
hNewDib = CopyHandle(hDIB);
hDib = CopyHandle(hDIB);
}
// process!
LPBYTE lpSrcDIB = (LPBYTE)GlobalLock(hDib);
LPBYTE lpDIB = (LPBYTE)GlobalLock(hNewDib);
LPBYTE lpInput = FindDIBBits(lpSrcDIB);
LPBYTE lpOutput = FindDIBBits(lpDIB);
int nWidth = DIBWidth(lpSrcDIB);
int nHeight = DIBHeight(lpSrcDIB);
BYTE *lpPoints=new BYTE[nWidth*nHeight];
ASSERT(lpPoints!=NULL);
//将图象数据取出为矩阵
GetPoints(nWidth,nHeight,lpInput,lpPoints,MEAN_TYPE);
int i,j;
//
//算法实现部分,就是处理矩阵lpPoints
//
delete peArray;
//将数据矩阵放到图象中
PutPoints(nWidth,nHeight,lpOutput,lpPoints);
delete lpPoints;
lpPoints = NULL;
// recover
DWORD dwSize = GlobalSize(hDib);
memcpy(lpSrcDIB, lpDIB, dwSize);
GlobalUnlock(hDib);
GlobalUnlock(hNewDib);
if (wBitCount != 24)
{
//?我很奇怪这,hNewDib指向还是有空间的,在没有释放的情况下赋值,旧的空间怎么办?是不是我看错了?
//是不是应该先释放?
hNewDib = ConvertDIBFormat(hDib, wBitCount, NULL);
lpSrcDIB = (LPBYTE)GlobalLock(hDIB);
lpDIB = (LPBYTE)GlobalLock(hNewDib);
dwSize = GlobalSize(hNewDib);
memcpy(lpSrcDIB, lpDIB, dwSize);
GlobalUnlock(hDIB);
GlobalUnlock(hNewDib);
}
else
{
lpSrcDIB = (LPBYTE)GlobalLock(hDIB);
lpDIB = (LPBYTE)GlobalLock(hDib);
dwSize = GlobalSize(hDib);
memcpy(lpSrcDIB, lpDIB, dwSize);
GlobalUnlock(hDIB);
GlobalUnlock(hDib);
}
// cleanup
GlobalFree(hDib);
GlobalFree(hNewDib);
// return
return TRUE;
}
我是这么使用它的
BOOL CDibPro::SpinFilter(CArray4b* pArray4b /*=NULL*/)
{
if (IsEmpty())
return FALSE;
//####m_hDib是类内的图象句柄,delete其实主要是释放它
if (!SpinFilterDIB(m_hDib,pArray4b))
return FALSE;
//return
return UpdateInternal();
}
问题!!!
我就很郁闷了,调用这个成员函数之前还可以delete对象(我用断点试了),调用之后就delete就出错!!!!!!!!!!!!!!!
我不知道这个函数那出问题了,郁闷,真是看不出来才问的?
...全文
相关推荐
五一活动-“劳有所得 不止5折”-纯线上预充值+群裂变+秒杀(美妆行业活动SOP).xlsx
五一活动-“劳有所得 不止5折”-纯线上预充值+群裂变+秒杀(美妆行业活动SOP)
思科交换机配置命令实战:从SSH到VLAN的完整运维指南
在网络工程中,交换机配置命令是构建稳定网络的基础技能。从设备初始化、远程登录到VLAN划分与三层路由,每一类命令都承担着明确的功能:SSH保障远程管理安全,VLAN实现广播域隔离,Trunk打通跨设备链路,ACL控制访问边界。理解这些命令的原理与应用场景,不仅能快速完成设备交付,更能精准定位故障,避免配置失误。当网络面临终端接入、业务隔离或带宽扩容需求时,掌握基础配置与高级运维技巧成为工程师的必备能力。本文以实际运维为视角,系统梳理思科交换机从Console登录、SSH配置、VLAN与Trunk部署到ACL
【节日活动SOP】七夕美妆行业活动:对你的喜欢,全在我脸上——美妆助攻,大胆说爱.xlsx
【节日活动SOP】七夕美妆行业活动:对你的喜欢,全在我脸上——美妆助攻,大胆说爱.xlsx
美妆行业活动sop.xlsx
美妆行业活动sop
【裂变SOP】吃货节-零食电商行业+任务裂变-超级吃货卡,5折吃全场!.xlsx
【裂变SOP】吃货节-零食电商行业+任务裂变-超级吃货卡,5折吃全场!.xlsx


