本文整理汇总了C++中DImage::getAllocMethod方法的典型用法代码示例。如果您正苦于以下问题:C++ DImage::getAllocMethod方法的具体用法?C++ DImage::getAllocMethod怎么用?C++ DImage::getAllocMethod使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DImage
的用法示例。
在下文中一共展示了DImage::getAllocMethod方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: filterImage_
///Max filter imgSrc with current settings and store result in imgDst
void DMaxFilter::filterImage_(DImage &imgDst, const DImage &imgSrc,
bool fAlreadyPadded, DProgress *pProg){
DMaxFiltType filtType;
DImage *pImgPad;
int wKern, hKern;
int numKernPxls;
int wUnpad, hUnpad;
#ifndef D_NOTHREADS
MAX_HUANG_8_THREAD_PARAMS_T rgParms[MAX_MAXFILT_THREADS];
pthread_t rgThreadID[MAX_MAXFILT_THREADS];
#endif
filtType = _maxFiltType;
pImgPad = (DImage*)&imgSrc;
if(!fAlreadyPadded){
pImgPad = new DImage();
imgSrc.padEdges_(*pImgPad, _radiusX, _radiusX, _radiusY, _radiusY,
DImage::DImagePadReplicate);
}
wUnpad = pImgPad->width()-(_radiusX*2);
hUnpad = pImgPad->height()-(_radiusY*2);
wKern = _radiusX * 2 + 1;
hKern = _radiusY * 2 + 1;
if(NULL == rgKern){
rgKern = (unsigned char*)malloc(sizeof(unsigned char) * wKern * hKern);
if(!rgKern){
fprintf(stderr, "DMaxFilter::filterImage_() out of memory\n");
exit(1);
}
rgRightEdge = (int*)malloc(sizeof(int)*hKern);
if(!rgRightEdge){
fprintf(stderr, "DMaxFilter::filterImage_() out of memory\n");
exit(1);
}
if(DMaxFilt_circle == filtType){
fill_circle_kern_offsets(_radiusX, _radiusY, rgKern,
rgRightEdge, &numKernPxls);
}
else{
fill_square_kern_offsets(_radiusX, _radiusY, rgKern,
rgRightEdge, &numKernPxls);
}
}
switch(imgSrc.getImageType()){
case DImage::DImage_u8:
{
imgDst.create(wUnpad, hUnpad, DImage::DImage_u8, 1,
imgSrc.getAllocMethod());
#ifndef D_NOTHREADS
for(int tnum = 1; tnum < _numThreads; ++tnum){
rgParms[tnum].pImgDst = &imgDst;
rgParms[tnum].pImgSrc = pImgPad;
rgParms[tnum].radiusX = _radiusX;
rgParms[tnum].radiusY = _radiusY;
rgParms[tnum].wKern = wKern;
rgParms[tnum].hKern = hKern;
rgParms[tnum].rgKern = rgKern;
rgParms[tnum].numKernPxls = numKernPxls;
rgParms[tnum].rgRightEdge = rgRightEdge;
rgParms[tnum].pProg = NULL;
rgParms[tnum].progStart = 0;
rgParms[tnum].progMax = 1;
rgParms[tnum].threadNumber = tnum;
rgParms[tnum].numThreads = _numThreads;
if(0 != pthread_create(&rgThreadID[tnum], NULL,
DMaxFilter::DMaxFilter_Huang8threadWrap,
&rgParms[tnum])){
fprintf(stderr, "DMaxFilter::filterImage_() failed to spawn "
"thread #%d. Exiting.\n", tnum);
exit(1);
}
}
#endif
maxFiltHuang_u8(imgDst, *pImgPad, _radiusX, _radiusY,
wKern, hKern, rgKern, numKernPxls,
rgRightEdge, pProg, 0, hUnpad+1, 0, _numThreads);
#ifndef D_NOTHREADS
for(int tnum = 1; tnum < _numThreads; ++tnum){
if(pthread_join(rgThreadID[tnum],NULL))
fprintf(stderr, "DMaxFilter::filterImage_() failed to join "
"thread %d\n", tnum);
}
#endif
if(NULL != pProg){
pProg->reportStatus(hUnpad+1, 0, hUnpad+1);//report progress complete
}
}
break;
case DImage::DImage_RGB:
{
DImage imgR, imgG, imgB;
DImage imgRDst, imgGDst, imgBDst;
//.........这里部分代码省略.........