Guest User

FreeImage delete[] error

a guest
Sep 12th, 2012
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. // FreeImage static linkage
  4. #define  FREEIMAGE_LIB
  5. #include "FreeImage/FreeImage.h"
  6. #include "FreeImage/Utilities.h"
  7. #pragma comment(lib, "FreeImage/FreeImaged.lib")
  8.  
  9. using namespace std;
  10.  
  11. static const wchar_t* sk_Filename = L"Test.tga";
  12.  
  13. // Error handler to use in callback
  14. void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *msg)
  15. {
  16.     char buf[1024];
  17.     sprintf_s(buf, 1024, "Error: %s", FreeImage_GetFormatFromFIF(fif));
  18.  
  19.     cout << buf;
  20. }
  21.  
  22.  
  23. // Bitmap loader from FreeImage samples
  24. FIBITMAP* GenericLoaderU(const wchar_t* lpszPathName, int flag)
  25. {
  26.     FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
  27.  
  28.     fif = FreeImage_GetFileTypeU(lpszPathName, 0);
  29.     if(fif == FIF_UNKNOWN)
  30.     {
  31.         fif = FreeImage_GetFIFFromFilenameU(lpszPathName);
  32.     }
  33.  
  34.     if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif))
  35.     {
  36.         FIBITMAP *dib = FreeImage_LoadU(fif, lpszPathName, flag);
  37.         return dib;
  38.     }
  39.     return NULL;
  40. }
  41.  
  42. // Function gets filename and returns bitmap data array, its size and bits per pixel
  43. void GetData(const wchar_t* szFilename, unsigned char* data, unsigned int& width, unsigned int& height, unsigned int& bpp)
  44. {
  45.     FIBITMAP* src = GenericLoaderU(szFilename, 0);
  46.    
  47.     if(src == 0)
  48.         return;
  49.  
  50.     FIBITMAP* src32 = FreeImage_ConvertTo32Bits(src);
  51.     FreeImage_Unload(src);
  52.  
  53.     // Get picture info
  54.     width = FreeImage_GetWidth(src32);
  55.     height = FreeImage_GetHeight(src32);
  56.     bpp = FreeImage_GetBPP(src32);
  57.     unsigned int scan_width = width * bpp/8;
  58.  
  59.     if((width == 0) || (height == 0) || (bpp == 0))
  60.         return;
  61.    
  62.      
  63.     memset(data, 0, height * scan_width);
  64.     SwapRedBlue32(src32); // Convert BGR to RGB
  65.  
  66.     // Get bitmap data
  67.     FreeImage_ConvertToRawBits(data, src32, scan_width, bpp, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, TRUE);
  68.  
  69.     FreeImage_Unload(src32);
  70.     return;
  71. }
  72.  
  73. int main()
  74. {
  75.     FreeImage_Initialise();
  76.     FreeImage_SetOutputMessage(FreeImageErrorHandler);
  77.  
  78.     //Creating bitmap data array (size is unknown here)
  79.     unsigned char* data = new unsigned char[];
  80.     unsigned int width(0), height(0), bpp(0);
  81.    
  82.     // Loading data here
  83.     GetData(sk_Filename, data, width, height, bpp);
  84.  
  85.     //Using data here
  86.     cout << width << "x" << height << "x" << bpp << endl;
  87.     for (unsigned int i = 0; i < width * height * bpp/8; )
  88.     {
  89.         cout << "("
  90.         << (unsigned int)data[i] << ", "
  91.         << (unsigned int)data[i+1] << ", "
  92.         << (unsigned int)data[i+2] << ", "
  93.         << (unsigned int)data[i+3] << ")"
  94.         << endl;
  95.  
  96.         i += 4;
  97.     }
  98.     cout << endl;
  99.  
  100.     //Cleanup
  101.     delete[] data;  // <-- Breaks with  _ASSERTE(_CrtIsValidHeapPointer(pUserData));
  102.                     // What's wrong here?
  103.  
  104.     system("pause");
  105.  
  106.     return 0;
  107. }
Add Comment
Please, Sign In to add comment