void rescale_image(char *data, unsigned short size, char *&data1, unsigned short &size1) { FI_INTERFACE *fei = NULL; CallService(MS_IMG_GETINTERFACE, FI_IF_VERSION, (LPARAM) &fei); if (fei == NULL) return; FIMEMORY *hmem = fei->FI_OpenMemory((BYTE *)data, size); FREE_IMAGE_FORMAT fif = fei->FI_GetFileTypeFromMemory(hmem, 0); FIBITMAP *dib = fei->FI_LoadFromMemory(fif, hmem, 0); fei->FI_CloseMemory(hmem); if (fei->FI_GetWidth(dib) > 64) { FIBITMAP *dib1 = fei->FI_Rescale(dib, 64, 64, FILTER_BSPLINE); FIMEMORY *hmem = fei->FI_OpenMemory(NULL, 0); fei->FI_SaveToMemory(fif, dib1, hmem, 0); BYTE *data2; DWORD size2; fei->FI_AcquireMemory(hmem, &data2, &size2); data1 = (char*)mir_alloc(size2); memcpy(data1, data2, size2); size1 = size2; fei->FI_CloseMemory(hmem); fei->FI_Unload(dib1); } fei->FI_Unload(dib); }