将HGGif集成到HGImgFmt.h中
This commit is contained in:
parent
7f15550da1
commit
238f92fc71
|
@ -5,6 +5,7 @@
|
|||
#include "HGTiff.h"
|
||||
#include "HGPdf.h"
|
||||
#include "HGOfd.h"
|
||||
#include "HGGif.h"
|
||||
#include "../base/HGInc.h"
|
||||
#include <string>
|
||||
|
||||
|
@ -19,6 +20,7 @@ struct HGImgFmtReaderImpl
|
|||
std::string fileName;
|
||||
HGUInt fmtType;
|
||||
HGPointer handle;
|
||||
HGGifLoadInfo gifLoadInfo;
|
||||
};
|
||||
|
||||
struct HGImgFmtWriterImpl
|
||||
|
@ -91,6 +93,14 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGBool isGif = HGFALSE;
|
||||
HGImgFmt_CheckGifFile(fileName, &isGif);
|
||||
if (isGif)
|
||||
{
|
||||
*fmtType = HGIMGFMT_TYPE_GIF;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
|
@ -143,6 +153,12 @@ HGResult HGAPI HGImgFmt_GetImgFmtTypeFromFileName(const HGChar* fileName, HGUInt
|
|||
*fmtType = HGIMGFMT_TYPE_OFD;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
if (0 == _stricmp(p, ".gif"))
|
||||
{
|
||||
*fmtType = HGIMGFMT_TYPE_GIF;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
#else
|
||||
if (0 == strcasecmp(p, ".jpe") || 0 == strcasecmp(p, ".jpg") || 0 == strcasecmp(p, ".jpeg"))
|
||||
{
|
||||
|
@ -179,6 +195,12 @@ HGResult HGAPI HGImgFmt_GetImgFmtTypeFromFileName(const HGChar* fileName, HGUInt
|
|||
*fmtType = HGIMGFMT_TYPE_OFD;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
if (0 == strcasecmp(p, ".gif"))
|
||||
{
|
||||
*fmtType = HGIMGFMT_TYPE_GIF;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
return HGBASE_ERR_FAIL;
|
||||
|
@ -186,7 +208,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtTypeFromFileName(const HGChar* fileName, HGUInt
|
|||
|
||||
HGResult HGAPI HGImgFmt_IsMultiImgFmtType(HGUInt fmtType, HGBool* isMulti)
|
||||
{
|
||||
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_OFD || NULL == isMulti)
|
||||
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_GIF || NULL == isMulti)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -201,7 +223,7 @@ HGResult HGAPI HGImgFmt_IsMultiImgFmtType(HGUInt fmtType, HGBool* isMulti)
|
|||
HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgFmtLoadInfo* info,
|
||||
HGUInt imgType, HGUInt imgOrigin, HGImage* image)
|
||||
{
|
||||
if (fmtType > HGIMGFMT_TYPE_OFD)
|
||||
if (fmtType > HGIMGFMT_TYPE_GIF)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -349,6 +371,26 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
|
|||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
else if (HGIMGFMT_TYPE_GIF == fmtType)
|
||||
{
|
||||
HGGifLoadInfo gifInfo;
|
||||
HGResult ret = HGImgFmt_LoadGifImage(fileName, &gifInfo, NULL, imgType, imgOrigin, image);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (NULL != info)
|
||||
{
|
||||
info->width = gifInfo.width;
|
||||
info->height = gifInfo.height;
|
||||
info->bpp = gifInfo.colorResolution;
|
||||
info->xDpi = 0;
|
||||
info->yDpi = 0;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
assert(0 == fmtType);
|
||||
|
||||
|
@ -465,12 +507,27 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGGifLoadInfo gifInfo;
|
||||
if (HGBASE_ERR_OK == HGImgFmt_LoadGifImage(fileName, &gifInfo, NULL, imgType, imgOrigin, image))
|
||||
{
|
||||
if (NULL != info)
|
||||
{
|
||||
info->width = gifInfo.width;
|
||||
info->height = gifInfo.height;
|
||||
info->bpp = gifInfo.colorResolution;
|
||||
info->xDpi = 0;
|
||||
info->yDpi = 0;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtSaveInfo* info, const HGChar* fileName)
|
||||
{
|
||||
if (fmtType > HGIMGFMT_TYPE_OFD)
|
||||
if (fmtType > HGIMGFMT_TYPE_GIF)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -478,7 +535,7 @@ HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtS
|
|||
if (0 == fmtType)
|
||||
{
|
||||
HGImgFmt_GetImgFmtTypeFromFileName(fileName, &fmtType);
|
||||
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_OFD)
|
||||
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_GIF)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -565,27 +622,31 @@ HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtS
|
|||
|
||||
return HGImgFmt_SavePdfJpegImage(image, pJpegInfo, fileName);
|
||||
}
|
||||
|
||||
assert(HGIMGFMT_TYPE_OFD == fmtType);
|
||||
|
||||
HGJpegSaveInfo jpegInfo;
|
||||
HGJpegSaveInfo* pJpegInfo = NULL;
|
||||
|
||||
if (NULL != info)
|
||||
else if (HGIMGFMT_TYPE_OFD == fmtType)
|
||||
{
|
||||
jpegInfo.quality = info->jpegQuality;
|
||||
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
|
||||
jpegInfo.xDensity = xDpi;
|
||||
jpegInfo.yDensity = yDpi;
|
||||
pJpegInfo = &jpegInfo;
|
||||
HGJpegSaveInfo jpegInfo;
|
||||
HGJpegSaveInfo* pJpegInfo = NULL;
|
||||
|
||||
if (NULL != info)
|
||||
{
|
||||
jpegInfo.quality = info->jpegQuality;
|
||||
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
|
||||
jpegInfo.xDensity = xDpi;
|
||||
jpegInfo.yDensity = yDpi;
|
||||
pJpegInfo = &jpegInfo;
|
||||
}
|
||||
|
||||
return HGImgFmt_SaveOfdJpegImage(image, pJpegInfo, fileName);
|
||||
}
|
||||
|
||||
return HGImgFmt_SaveOfdJpegImage(image, pJpegInfo, fileName);
|
||||
assert(HGIMGFMT_TYPE_GIF == fmtType);
|
||||
|
||||
return HGImgFmt_SaveGifImage(image, NULL, 0, fileName);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType, HGImgFmtReader* reader)
|
||||
{
|
||||
if (NULL == fileName || fmtType > HGIMGFMT_TYPE_OFD || NULL == reader)
|
||||
if (NULL == fileName || fmtType > HGIMGFMT_TYPE_GIF || NULL == reader)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -648,6 +709,24 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
|
|||
*reader = (HGImgFmtReader)imgFmtReaderImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
else if (HGIMGFMT_TYPE_GIF == fmtType)
|
||||
{
|
||||
HGGifLoadInfo gifLoadInfo;
|
||||
HGGifReader gifReader = NULL;
|
||||
HGResult ret = HGImgFmt_OpenGifReader(fileName, &gifLoadInfo, &gifReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
|
||||
imgFmtReaderImpl->fileName = fileName;
|
||||
imgFmtReaderImpl->fmtType = fmtType;
|
||||
imgFmtReaderImpl->handle = gifReader;
|
||||
memcpy(&imgFmtReaderImpl->gifLoadInfo, &gifLoadInfo, sizeof(HGGifLoadInfo));
|
||||
*reader = (HGImgFmtReader)imgFmtReaderImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
assert(0 == fmtType);
|
||||
|
||||
|
@ -723,6 +802,20 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGGifLoadInfo gifLoadInfo;
|
||||
HGGifReader gifReader = NULL;
|
||||
ret = HGImgFmt_OpenGifReader(fileName, &gifLoadInfo, &gifReader);
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
|
||||
imgFmtReaderImpl->fileName = fileName;
|
||||
imgFmtReaderImpl->fmtType = HGIMGFMT_TYPE_GIF;
|
||||
imgFmtReaderImpl->handle = gifReader;
|
||||
memcpy(&imgFmtReaderImpl->gifLoadInfo, &gifLoadInfo, sizeof(HGGifLoadInfo));
|
||||
*reader = (HGImgFmtReader)imgFmtReaderImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
|
@ -740,6 +833,8 @@ HGResult HGAPI HGImgFmt_CloseImageReader(HGImgFmtReader reader)
|
|||
HGImgFmt_ClosePdfReader((HGPdfReader)imgFmtReaderImpl->handle);
|
||||
else if (HGIMGFMT_TYPE_OFD == imgFmtReaderImpl->fmtType)
|
||||
HGImgFmt_CloseOfdReader((HGOfdReader)imgFmtReaderImpl->handle);
|
||||
else if (HGIMGFMT_TYPE_GIF == imgFmtReaderImpl->fmtType)
|
||||
HGImgFmt_CloseGifReader((HGGifReader)imgFmtReaderImpl->handle);
|
||||
|
||||
delete imgFmtReaderImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -759,6 +854,11 @@ HGResult HGAPI HGImgFmt_GetImagePageCount(HGImgFmtReader reader, HGUInt* count)
|
|||
return HGImgFmt_GetPdfPageCount((HGPdfReader)imgFmtReaderImpl->handle, count);
|
||||
else if (HGIMGFMT_TYPE_OFD == imgFmtReaderImpl->fmtType)
|
||||
return HGImgFmt_GetOfdPageCount((HGOfdReader)imgFmtReaderImpl->handle, count);
|
||||
else if (HGIMGFMT_TYPE_GIF == imgFmtReaderImpl->fmtType)
|
||||
{
|
||||
*count = imgFmtReaderImpl->gifLoadInfo.imageCount;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
*count = 1;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -912,30 +1012,65 @@ HGResult HGAPI HGImgFmt_LoadImageFromReader(HGImgFmtReader reader, HGUInt index,
|
|||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
assert(HGIMGFMT_TYPE_OFD == imgFmtReaderImpl->fmtType);
|
||||
|
||||
HGResult ret = HGImgFmt_LoadImageFromOfdReader((HGOfdReader)imgFmtReaderImpl->handle, index, 1.0f, 1.0f, imgType, imgOrigin, image);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
else if (HGIMGFMT_TYPE_OFD == imgFmtReaderImpl->fmtType)
|
||||
{
|
||||
return ret;
|
||||
HGResult ret = HGImgFmt_LoadImageFromOfdReader((HGOfdReader)imgFmtReaderImpl->handle, index, 1.0f, 1.0f, imgType, imgOrigin, image);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (NULL != info)
|
||||
{
|
||||
info->width = 0;
|
||||
info->height = 0;
|
||||
info->bpp = 0;
|
||||
info->xDpi = 0;
|
||||
info->yDpi = 0;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
assert(HGIMGFMT_TYPE_GIF == imgFmtReaderImpl->fmtType);
|
||||
|
||||
if (NULL == image)
|
||||
{
|
||||
if (0 != imgType || 0 != imgOrigin)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
}
|
||||
|
||||
if (index >= imgFmtReaderImpl->gifLoadInfo.imageCount)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
if (NULL != info)
|
||||
{
|
||||
info->width = 0;
|
||||
info->height = 0;
|
||||
info->bpp = 0;
|
||||
info->width = imgFmtReaderImpl->gifLoadInfo.width;
|
||||
info->height = imgFmtReaderImpl->gifLoadInfo.height;
|
||||
info->bpp = imgFmtReaderImpl->gifLoadInfo.colorResolution;
|
||||
info->xDpi = 0;
|
||||
info->yDpi = 0;
|
||||
}
|
||||
|
||||
if (NULL != image)
|
||||
{
|
||||
HGResult ret = HGImgFmt_LoadImageFromGifReader((HGGifReader)imgFmtReaderImpl->handle, index, NULL, imgType, imgOrigin, image);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGAPI HGImgFmt_OpenImageWriter(const HGChar* fileName, HGUInt fmtType, HGImgFmtWriter* writer)
|
||||
{
|
||||
if (fmtType > HGIMGFMT_TYPE_OFD || NULL == writer)
|
||||
if (fmtType > HGIMGFMT_TYPE_GIF || NULL == writer)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -943,7 +1078,7 @@ HGResult HGAPI HGImgFmt_OpenImageWriter(const HGChar* fileName, HGUInt fmtType,
|
|||
if (0 == fmtType)
|
||||
{
|
||||
HGImgFmt_GetImgFmtTypeFromFileName(fileName, &fmtType);
|
||||
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_OFD)
|
||||
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_GIF)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
@ -994,11 +1129,28 @@ HGResult HGAPI HGImgFmt_OpenImageWriter(const HGChar* fileName, HGUInt fmtType,
|
|||
*writer = (HGImgFmtWriter)imgFmtWriterImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
else if (HGIMGFMT_TYPE_OFD == fmtType)
|
||||
{
|
||||
HGOfdImageWriter ofdWriter = NULL;
|
||||
HGResult ret = HGImgFmt_OpenOfdImageWriter(fileName, &ofdWriter);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
assert(HGIMGFMT_TYPE_OFD == fmtType);
|
||||
HGImgFmtWriterImpl* imgFmtWriterImpl = new HGImgFmtWriterImpl;
|
||||
imgFmtWriterImpl->fileName = fileName;
|
||||
imgFmtWriterImpl->fmtType = fmtType;
|
||||
imgFmtWriterImpl->handle = ofdWriter;
|
||||
imgFmtWriterImpl->write = HGFALSE;
|
||||
*writer = (HGImgFmtWriter)imgFmtWriterImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGOfdImageWriter ofdWriter = NULL;
|
||||
HGResult ret = HGImgFmt_OpenOfdImageWriter(fileName, &ofdWriter);
|
||||
assert(HGIMGFMT_TYPE_GIF == fmtType);
|
||||
|
||||
HGGifWriter gifWriter = NULL;
|
||||
HGResult ret = HGImgFmt_OpenGifWriter(fileName, NULL, &gifWriter);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
|
@ -1007,7 +1159,7 @@ HGResult HGAPI HGImgFmt_OpenImageWriter(const HGChar* fileName, HGUInt fmtType,
|
|||
HGImgFmtWriterImpl* imgFmtWriterImpl = new HGImgFmtWriterImpl;
|
||||
imgFmtWriterImpl->fileName = fileName;
|
||||
imgFmtWriterImpl->fmtType = fmtType;
|
||||
imgFmtWriterImpl->handle = ofdWriter;
|
||||
imgFmtWriterImpl->handle = gifWriter;
|
||||
imgFmtWriterImpl->write = HGFALSE;
|
||||
*writer = (HGImgFmtWriter)imgFmtWriterImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -1027,6 +1179,8 @@ HGResult HGAPI HGImgFmt_CloseImageWriter(HGImgFmtWriter writer)
|
|||
HGImgFmt_ClosePdfImageWriter((HGPdfImageWriter)imgFmtWriterImpl->handle);
|
||||
else if (HGIMGFMT_TYPE_OFD == imgFmtWriterImpl->fmtType)
|
||||
HGImgFmt_CloseOfdImageWriter((HGOfdImageWriter)imgFmtWriterImpl->handle);
|
||||
else if (HGIMGFMT_TYPE_GIF == imgFmtWriterImpl->fmtType)
|
||||
HGImgFmt_CloseGifWriter((HGGifWriter)imgFmtWriterImpl->handle);
|
||||
|
||||
delete imgFmtWriterImpl;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -1154,20 +1308,24 @@ HGResult HGAPI HGImgFmt_SaveImageToWriter(HGImgFmtWriter writer, HGImage image,
|
|||
|
||||
return HGImgFmt_SaveJpegImageToPdfImageWriter((HGPdfImageWriter)imgFmtWriterImpl->handle, image, pJpegInfo);
|
||||
}
|
||||
|
||||
assert(HGIMGFMT_TYPE_OFD == imgFmtWriterImpl->fmtType);
|
||||
|
||||
HGJpegSaveInfo jpegInfo;
|
||||
HGJpegSaveInfo* pJpegInfo = NULL;
|
||||
|
||||
if (NULL != info)
|
||||
else if (HGIMGFMT_TYPE_OFD == imgFmtWriterImpl->fmtType)
|
||||
{
|
||||
jpegInfo.quality = info->jpegQuality;
|
||||
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
|
||||
jpegInfo.xDensity = xDpi;
|
||||
jpegInfo.yDensity = yDpi;
|
||||
pJpegInfo = &jpegInfo;
|
||||
HGJpegSaveInfo jpegInfo;
|
||||
HGJpegSaveInfo* pJpegInfo = NULL;
|
||||
|
||||
if (NULL != info)
|
||||
{
|
||||
jpegInfo.quality = info->jpegQuality;
|
||||
jpegInfo.densityUnit = HGIMGFMT_JPEGDENUNIT_INCH;
|
||||
jpegInfo.xDensity = xDpi;
|
||||
jpegInfo.yDensity = yDpi;
|
||||
pJpegInfo = &jpegInfo;
|
||||
}
|
||||
|
||||
return HGImgFmt_SaveJpegImageToOfdImageWriter((HGOfdImageWriter)imgFmtWriterImpl->handle, image, pJpegInfo);
|
||||
}
|
||||
|
||||
return HGImgFmt_SaveJpegImageToOfdImageWriter((HGOfdImageWriter)imgFmtWriterImpl->handle, image, pJpegInfo);
|
||||
assert(HGIMGFMT_TYPE_GIF == imgFmtWriterImpl->fmtType);
|
||||
|
||||
return HGImgFmt_SaveImageToGifWriter((HGGifWriter)imgFmtWriterImpl->handle, 0, image);
|
||||
}
|
|
@ -22,6 +22,8 @@ HG_DECLARE_HANDLE(HGImgFmtWriter);
|
|||
#define HGIMGFMT_TYPE_PDF 5L
|
||||
/* OFD */
|
||||
#define HGIMGFMT_TYPE_OFD 6L
|
||||
/* GIF */
|
||||
#define HGIMGFMT_TYPE_GIF 7L
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue