Пример #1
0
//
// imgResizerEx()
//
BOOL imgResizerEx(UTF8 *	pszFileSource,		// Nome del file sorgente
				  UTF8 *	pszFileDest,			// Stringa da aggiungere al nome del file
				  SIZE *	psDimFix,			// Dimensioni della foto finale
				  SIZE *	psMin,			// Dimensioni massime della foto finale (new 2015)
				  SIZE *	psMax,			// Dimensioni massime della foto finale (new 2015)
				  INT		iQuality,			// 10>100 Qualità del JPG
				  double	dPhotoPerc,			// Percentuale dell'immagine da occupare 25= 1/4
				  BOOL		fMakeEver,			// T/F: Costruisce sempre
				  INT		iResampling,		// Tipo di ricampionamento TRS_LANCZOS=10
				  EN_IMGPT	enPhotoAdatta,		// Tipo di adattamento alla foto (vedi EN_IMGPT)
												// 0 = Proporzionale
												// 1 = Best in fit (Adatta al formato)
												// 2 = adatta al corto
												// 3 = adatta al lungo
												// 5 = Taglia

				  INT		cBackColor,			// Colore di background (per riempire gli spazi vuoti)
				  INT		iAlignH,			// Allineamento foto orizzontale 0=Centrale, 1=Left, 2=Right
				  INT		iAlignV,			// Allineamento foto verticale   0=Centrale, 1=Top,  2=Down
				  INT		iPhotoOffsetX,		// Correzione su allineamento Orizzontale
				  INT		iPhotoOffsetY,		// Correzione su allineamento Verticale
				  INT		iImageAlpha,		// Percentuale di trasparenza dell'immagine con il background
				  BOOL		fAutoLevel,
				  INT		iOrientation,		// Rotazione Exif dell'immagine

				  CHAR *	lpLogoFile,			// Logo del file da fondere all'immagine (può non esserci)
				  double	dLogoPerc,			// Percentuale dell'immagine da occupare 25= 1/4
				  SIZE *	psLogoFix,			// Dimensioni fise del logo (non proporzionali alla foto) (new 2015)
				  INT		iLogoAlignH,		// Allineamento foto orizzontale 0=Centrale, 1=Left, 2=Right
				  INT		iLogoAlignV,		// Allineamento foto verticale 0=Centrale, 1=Top, 2=Down
				  INT		iLogoOffsetX,		// Correzione su allineamento Orizzontale
				  INT		iLogoOffsetY,		// Correzione su allineamento Verticale
				  INT		iLogoAlpha,
				  BOOL		fLogoPos,			// 0 sulla nuova Immagine calcolata, 1= Sull'immagine originale

				  CHAR *	lpText)				// Testo da stampare
{
	IMG_RESIZE sImgResize;
	_(sImgResize);
	sImgResize.pszFileSource=pszFileSource;
	sImgResize.pszFileDest=pszFileDest;
	memcpy(&sImgResize.sFix,psDimFix,sizeof(SIZE));
	sImgResize.psMin=psMin;
	sImgResize.psMax=psMax;
//	memcpy(&sImgResize.sMax,&sDimMax,sizeof(SIZE));
	sImgResize.iQuality=iQuality;
	sImgResize.fMakeEver=fMakeEver;
	sImgResize.iResampling=iResampling;
	sImgResize.iOrientation=iOrientation;
	sImgResize.enPhotoAdatta=enPhotoAdatta;
	sImgResize.cBackColor=cBackColor;
	sImgResize.bAutoLevel=fAutoLevel;
	sImgResize.lpText=lpText;
	sImgResize.bQuickLoading=true;

	sImgResize.sPhoto.dPerc=dPhotoPerc;
	sImgResize.sPhoto.iAlignHor=iAlignH;
	sImgResize.sPhoto.iAlignVer=iAlignV;
	sImgResize.sPhoto.iOffsetX=iPhotoOffsetX;
	sImgResize.sPhoto.iOffsetY=iPhotoOffsetY;
	sImgResize.sPhoto.iAlpha=iImageAlpha;

	if (lpLogoFile)
	{
		sImgResize.sLogo.bPosWhere=fLogoPos;
		strcpy(sImgResize.sLogo.szFile,lpLogoFile);
		sImgResize.sLogo.iAlignHor=iLogoAlignH;
		sImgResize.sLogo.iAlignVer=iLogoAlignV;
		sImgResize.sLogo.iOffsetX=iLogoOffsetX;
		sImgResize.sLogo.iOffsetY=iLogoOffsetY;
		sImgResize.sLogo.iAlpha=iLogoAlpha;
		sImgResize.sLogo.dPerc=dLogoPerc;
		sImgResize.sLogo.psSizeFix=psLogoFix;
	}
	return imgResize(&sImgResize);
}
Пример #2
0
int getsamples_scales_in_out(uchar *pubyImage, int dwImgW, int dwImgH,
                      int *pdwLPBBS, int dwLPBBSLen, int dwStdW, int dwStdH,
                      float *pfSampleList, int *pdwTagList, int *pdwSampleNum)
{
#define MAX_SCALES_NUM 20
    int dwI, dwPI;
    float afScales[MAX_SCALES_NUM], fScaleNow;
    uchar *pubyRSZImage = 0;
    int dwRSZImgW, dwRSZImgH;
    int *pdwLPBBS_RSZ = 0;
    int dwSampleNumMax = *pdwSampleNum;
    int dwSampleNumAll = 0, dwSampleNumNow = 0;
    int dwVecLen = dwStdW * dwStdH;
    
    afScales[0] = 1.0f;
    for (dwI = 1; dwI < MAX_SCALES_NUM; dwI++) {
        afScales[dwI] = afScales[dwI-1] * 0.95f;
    }
    
    pubyRSZImage = (uchar*)malloc(dwImgH * dwImgW);
    pdwLPBBS_RSZ = (int*)malloc(dwLPBBSLen * sizeof(int));
    
    for (dwI = 0; dwI < MAX_SCALES_NUM; dwI++) {
        fScaleNow = afScales[dwI];
        dwRSZImgW = (int)(dwImgW * fScaleNow + 0.5f);
        dwRSZImgH = (int)(dwImgH * fScaleNow + 0.5f);
        
        if (dwRSZImgH < dwStdH) {
            //    printf("getsamples_scales: over the dwStdH. \n");
            break;
        }
        
        imgResize(pubyImage, dwImgW, dwImgH, pubyRSZImage, dwRSZImgW, dwRSZImgH);
        
        for (dwPI = 0; dwPI < dwLPBBSLen; dwPI++) {
            pdwLPBBS_RSZ[dwPI] = (int)(pdwLPBBS[dwPI] * fScaleNow + 0.5f);
            //    printf("%d, ", pdwLPBBS_RSZ[dwPI]);
        }
        
        dwSampleNumNow = dwSampleNumMax - dwSampleNumAll;
        getsamples_in_out(pubyRSZImage, dwRSZImgW, dwRSZImgH, pdwLPBBS_RSZ, dwLPBBSLen,
                   dwStdW, dwStdH, pfSampleList + dwSampleNumAll * dwVecLen, pdwTagList + dwSampleNumAll, &dwSampleNumNow);
        dwSampleNumAll += dwSampleNumNow;
        
        if (dwSampleNumAll >= dwSampleNumMax) {
            printf("getsamples_scales: over maximum sample number.\n");
            break;
        }
    }
    
     //   for (dwPI = 0; dwPI < dwVecLen; dwPI++) {
     //      printf("%.3f, ", pfSampleList[dwPI]);
     //   }
     //   printf("\n");
    
    *pdwSampleNum = dwSampleNumAll;
    
    free(pubyRSZImage);
    free(pdwLPBBS_RSZ);
    
    return 0;
}