📄 libmng_hlapi.c
字号:
pData->iFrametimeout = 0x7fffffffl; pData->bFrameclipping = MNG_FALSE; pData->iFrameclipl = 0; pData->iFrameclipr = 0; pData->iFrameclipt = 0; pData->iFrameclipb = 0; pData->iNextdelay = 1; pData->iSHOWmode = 0; /* reset SHOW data */ pData->iSHOWfromid = 0; pData->iSHOWtoid = 0; pData->iSHOWnextid = 0; pData->iSHOWskip = 0; pData->iGlobalPLTEcount = 0; /* reset global PLTE data */ pData->iGlobalTRNSrawlen = 0; /* reset global tRNS data */ pData->iGlobalGamma = 0; /* reset global gAMA data */ pData->iGlobalWhitepointx = 0; /* reset global cHRM data */ pData->iGlobalWhitepointy = 0; pData->iGlobalPrimaryredx = 0; pData->iGlobalPrimaryredy = 0; pData->iGlobalPrimarygreenx = 0; pData->iGlobalPrimarygreeny = 0; pData->iGlobalPrimarybluex = 0; pData->iGlobalPrimarybluey = 0; pData->iGlobalRendintent = 0; /* reset global sRGB data */ if (pData->iGlobalProfilesize) /* drop global profile (if any) */ MNG_FREE (pData, pData->pGlobalProfile, pData->iGlobalProfilesize) pData->iGlobalProfilesize = 0; pData->iGlobalBKGDred = 0; /* reset global bKGD data */ pData->iGlobalBKGDgreen = 0; pData->iGlobalBKGDblue = 0; /* reset delta-image */ pData->pDeltaImage = MNG_NULL; pData->iDeltaImagetype = 0; pData->iDeltatype = 0; pData->iDeltaBlockwidth = 0; pData->iDeltaBlockheight = 0; pData->iDeltaBlockx = 0; pData->iDeltaBlocky = 0; pData->bDeltaimmediate = MNG_FALSE; return MNG_NOERROR;}#endif /* MNG_SUPPORT_DISPLAY *//* ************************************************************************** */void cleanup_errors (mng_datap pData){ pData->iErrorcode = MNG_NOERROR; pData->iSeverity = 0; pData->iErrorx1 = 0; pData->iErrorx2 = 0; pData->zErrortext = MNG_NULL; return;}/* ************************************************************************** *//* * * *//* * Versioning control * *//* * * *//* ************************************************************************** */mng_pchar MNG_DECL mng_version_text (void){ return MNG_VERSION_TEXT;}/* ************************************************************************** */mng_uint8 MNG_DECL mng_version_so (void){ return MNG_VERSION_SO;}/* ************************************************************************** */mng_uint8 MNG_DECL mng_version_dll (void){ return MNG_VERSION_DLL;}/* ************************************************************************** */mng_uint8 MNG_DECL mng_version_major (void){ return MNG_VERSION_MAJOR;}/* ************************************************************************** */mng_uint8 MNG_DECL mng_version_minor (void){ return MNG_VERSION_MINOR;}/* ************************************************************************** */mng_uint8 MNG_DECL mng_version_release (void){ return MNG_VERSION_RELEASE;}/* ************************************************************************** *//* * * *//* * HLAPI routines * *//* * * *//* ************************************************************************** */mng_handle MNG_DECL mng_initialize (mng_ptr pUserdata, mng_memalloc fMemalloc, mng_memfree fMemfree, mng_traceproc fTraceproc){ mng_datap pData;#ifdef MNG_SUPPORT_DISPLAY mng_retcode iRetcode; mng_imagep pImage;#endif#ifdef MNG_INTERNAL_MEMMNGMT /* allocate the main datastruc */ pData = (mng_datap)calloc (1, sizeof (mng_data));#else pData = (mng_datap)fMemalloc (sizeof (mng_data));#endif if (!pData) return MNG_NULL; /* error: out of memory?? */ /* validate the structure */ pData->iMagic = MNG_MAGIC; /* save userdata field */ pData->pUserdata = pUserdata; /* remember trace callback */ pData->fTraceproc = fTraceproc;#ifdef MNG_SUPPORT_TRACE if (mng_trace (pData, MNG_FN_INITIALIZE, MNG_LC_INITIALIZE)) { MNG_FREEX (pData, pData, sizeof (mng_data)) return MNG_NULL; }#endif /* default canvas styles are 8-bit RGB */ pData->iCanvasstyle = MNG_CANVAS_RGB8; pData->iBkgdstyle = MNG_CANVAS_RGB8; pData->iBGred = 0; /* black */ pData->iBGgreen = 0; pData->iBGblue = 0; pData->bUseBKGD = MNG_TRUE;#ifdef MNG_FULL_CMS pData->bIssRGB = MNG_TRUE; pData->hProf1 = 0; /* no profiles yet */ pData->hProf2 = 0; pData->hProf3 = 0; pData->hTrans = 0;#endif pData->dViewgamma = 1.0; pData->dDisplaygamma = 2.2; pData->dDfltimggamma = 0.45455; /* initially remember chunks */ pData->bStorechunks = MNG_TRUE; /* no breaks at section-borders */ pData->bSectionbreaks = MNG_FALSE; /* initially cache playback info */ pData->bCacheplayback = MNG_TRUE; /* progressive refresh for large images */ pData->bDoProgressive = MNG_TRUE; /* normal animation-speed ! */ pData->iSpeed = mng_st_normal; /* initial image limits */ pData->iMaxwidth = 10000; pData->iMaxheight = 10000;#ifdef MNG_INTERNAL_MEMMNGMT /* internal management */ pData->fMemalloc = MNG_NULL; pData->fMemfree = MNG_NULL;#else /* keep callbacks */ pData->fMemalloc = fMemalloc; pData->fMemfree = fMemfree;#endif /* no value (yet) */ pData->fOpenstream = MNG_NULL; pData->fClosestream = MNG_NULL; pData->fReaddata = MNG_NULL; pData->fWritedata = MNG_NULL; pData->fErrorproc = MNG_NULL; pData->fProcessheader = MNG_NULL; pData->fProcesstext = MNG_NULL; pData->fProcesssave = MNG_NULL; pData->fProcessseek = MNG_NULL; pData->fProcessneed = MNG_NULL; pData->fProcessmend = MNG_NULL; pData->fProcessunknown = MNG_NULL; pData->fProcessterm = MNG_NULL; pData->fGetcanvasline = MNG_NULL; pData->fGetbkgdline = MNG_NULL; pData->fGetalphaline = MNG_NULL; pData->fRefresh = MNG_NULL; pData->fGettickcount = MNG_NULL; pData->fSettimer = MNG_NULL; pData->fProcessgamma = MNG_NULL; pData->fProcesschroma = MNG_NULL; pData->fProcesssrgb = MNG_NULL; pData->fProcessiccp = MNG_NULL; pData->fProcessarow = MNG_NULL;#if defined(MNG_SUPPORT_DISPLAY) && (defined(MNG_GAMMA_ONLY) || defined(MNG_FULL_CMS)) pData->dLastgamma = 0; /* lookup table needs first-time calc */#endif#ifdef MNG_SUPPORT_DISPLAY /* create object 0 */ iRetcode = create_imageobject (pData, 0, MNG_TRUE, MNG_TRUE, MNG_TRUE, 0, 0, 0, 0, 0, 0, 0, 0, 0, MNG_FALSE, 0, 0, 0, 0, &pImage); if (iRetcode) /* on error drop out */ { MNG_FREEX (pData, pData, sizeof (mng_data)) return MNG_NULL; } pData->pObjzero = pImage;#endif#if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_INCLUDE_LCMS) mnglcms_initlibrary (); /* init lcms particulairs */#endif#ifdef MNG_SUPPORT_READ pData->bSuspensionmode = MNG_FALSE; pData->iSuspendbufsize = 0; pData->pSuspendbuf = MNG_NULL; pData->pSuspendbufnext = MNG_NULL; pData->iSuspendbufleft = 0; pData->iChunklen = 0; pData->pReadbufnext = MNG_NULL;#endif#ifdef MNG_INCLUDE_ZLIB mngzlib_initialize (pData); /* initialize zlib structures and such */ /* default zlib compression parameters */ pData->iZlevel = MNG_ZLIB_LEVEL; pData->iZmethod = MNG_ZLIB_METHOD; pData->iZwindowbits = MNG_ZLIB_WINDOWBITS; pData->iZmemlevel = MNG_ZLIB_MEMLEVEL; pData->iZstrategy = MNG_ZLIB_STRATEGY; /* default maximum IDAT data size */ pData->iMaxIDAT = MNG_MAX_IDAT_SIZE;#endif#ifdef MNG_INCLUDE_JNG /* default IJG compression parameters */ pData->eJPEGdctmethod = MNG_JPEG_DCT; pData->iJPEGquality = MNG_JPEG_QUALITY; pData->iJPEGsmoothing = MNG_JPEG_SMOOTHING; pData->bJPEGcompressprogr = MNG_JPEG_PROGRESSIVE; pData->bJPEGcompressopt = MNG_JPEG_OPTIMIZED; /* default maximum JDAT data size */ pData->iMaxJDAT = MNG_MAX_JDAT_SIZE;#endif mng_reset ((mng_handle)pData);#ifdef MNG_SUPPORT_TRACE if (mng_trace (pData, MNG_FN_INITIALIZE, MNG_LC_END)) { MNG_FREEX (pData, pData, sizeof (mng_data)) return MNG_NULL; }#endif return (mng_handle)pData; /* if we get here, we're in business */}/* ************************************************************************** */mng_retcode MNG_DECL mng_reset (mng_handle hHandle){ mng_datap pData;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (((mng_datap)hHandle), MNG_FN_RESET, MNG_LC_START)#endif MNG_VALIDHANDLE (hHandle) /* check validity handle */ pData = ((mng_datap)(hHandle)); /* address main structure */#ifdef MNG_SUPPORT_DISPLAY mng_drop_savedata (pData); /* cleanup saved-data from SAVE/SEEK */#endif#if defined(MNG_SUPPORT_DISPLAY) && defined(MNG_FULL_CMS) mng_clear_cms (pData); /* cleanup left-over cms stuff if any */#endif#ifdef MNG_INCLUDE_JNG mngjpeg_cleanup (pData); /* cleanup jpeg stuff */#endif#ifdef MNG_INCLUDE_ZLIB if (pData->bInflating) /* if we've been inflating */ {#ifdef MNG_INCLUDE_DISPLAY_PROCS cleanup_rowproc (pData); /* cleanup row-processing, */#endif mngzlib_inflatefree (pData); /* cleanup inflate! */ }#endif /* MNG_INCLUDE_ZLIB */#ifdef MNG_SUPPORT_READ if ((pData->bReading) && (!pData->bEOF)) process_eof (pData); /* cleanup app streaming */ /* cleanup default read buffers */ MNG_FREE (pData, pData->pReadbuf, pData->iReadbufsize) MNG_FREE (pData, pData->pLargebuf, pData->iLargebufsize) MNG_FREE (pData, pData->pSuspendbuf, pData->iSuspendbufsize)#endif#ifdef MNG_SUPPORT_WRITE /* cleanup default write buffer */ MNG_FREE (pData, pData->pWritebuf, pData->iWritebufsize)#endif#if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE) mng_drop_chunks (pData); /* drop stored chunks (if any) */#endif#ifdef MNG_SUPPORT_DISPLAY mng_drop_objects (pData, MNG_TRUE); /* drop stored objects (if any) */ if (pData->iGlobalProfilesize) /* drop global profile (if any) */ MNG_FREEX (pData, pData->pGlobalProfile, pData->iGlobalProfilesize)#endif pData->eSigtype = mng_it_unknown; pData->eImagetype = mng_it_unknown; pData->iWidth = 0; /* these are unknown yet */ pData->iHeight = 0; pData->iTicks = 0; pData->iLayercount = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -