// // 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); }
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; }