如何使用FreeImage_Unload(),并且不要丢失图像数据

How to use FreeImage_Unload(), and don't lose the image data

本文关键字:数据 图像 FreeImage 何使用 Unload      更新时间:2023-10-16

我有一个看起来像下面的类:

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