我有一个类,看起来像下面这样:
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”时,我都不会丢失信息?
有什么建议么?
最佳答案
您必须将图像数据从FreeImage的DIB复制到单独的位置:
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
。关于c++ - 如何使用FreeImage_Unload(),并且不丢失图像数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10628406/