2012-05-17 4 views
2

У меня есть класс, который выглядит следующим образом:Как пользоваться FreeImage_Unload(), и не потерять данные изображения

class myTexture 
{ 
    public: 
     myTexture(); 
     ~myTexture(); 
     unsigned char * data; 
     void loadFile(string file) 
     { 
      FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; 
      FIBITMAP *dib(0); 
      BYTE* bits; 

      fif = FreeImage_GetFileType(filename.c_str(), 0); 
      if(fif == FIF_UNKNOWN) 
       fif = FreeImage_GetFIFFromFilename(filename.c_str()); 

      if(FreeImage_FIFSupportsReading(fif)) 
       dib = FreeImage_Load(fif, filename.c_str(), 0); 

      bits = FreeImage_GetBits(dib); 
      data = bits; 
      FreeImage_Unload(dib); 
     } 
}; 

Когда я FreeImage_Unload (DIB), я потеряю информацию данных, как могу ли я копировать информацию о «битах» в «данные», поэтому всякий раз, когда я выгружаю «dib», я не теряю информацию?

Любые предложения?

ответ

1

Вы должны скопировать данные изображения из DIB FreeImage на отдельном месте:

int Width = FreeImage_GetWidth(dib); 
int Height = FreeImage_GetHeight(dib); 
int BPP = FreeImage_GetBPP(dib)/8; 
bits = FreeImage_GetBits(dib); 
data = malloc(Width * Height * BPP); 
memcpy(data, bits, Width * Height * BPP); 

Теперь вы можете освободить dib, как вы делаете.

+1

Обратите внимание, что если в поле есть отступы, правильнее делать GetPitch() x GetHeight() для вычисления длины в malloc и memcpy – StarShine

 Смежные вопросы

  • Нет связанных вопросов^_^