HGImgFmt库完善错误码

This commit is contained in:
luoliangyi 2022-11-26 10:42:06 +08:00
parent 3cc60d472a
commit 69ccf8fff9
12 changed files with 280 additions and 193 deletions

View File

@ -15,8 +15,13 @@ HGResult HGAPI HGImgFmt_CheckBmpFile(const HGChar* fileName, HGBool* isBmp)
HGBmpLoadInfo info; HGBmpLoadInfo info;
HGResult ret = HGImgFmt_LoadBmpImage(fileName, &info, 0, 0, NULL); HGResult ret = HGImgFmt_LoadBmpImage(fileName, &info, 0, 0, NULL);
*isBmp = (HGBASE_ERR_OK == ret ? HGTRUE : HGFALSE); if (HGBASE_ERR_OK != ret)
return HGBASE_ERR_OK; {
return ret;
}
*isBmp = HGTRUE;
return ret;
} }
static void* bitmap_create(int width, int height, unsigned int state) static void* bitmap_create(int width, int height, unsigned int state)

View File

@ -400,14 +400,24 @@ HGResult HGAPI HGImgFmt_CheckGifFile(const HGChar* fileName, HGBool* isGif)
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
*isGif = HGFALSE; #if defined(HG_CMP_MSC)
if (0 != _access(fileName, 0))
#else
if (0 != access(fileName, 0))
#endif
{
return HGBASE_ERR_FILENOTEXIST;
}
int err; int err;
GifFileType* gifFile = DGifOpenFileName(fileName, &err); GifFileType* gifFile = DGifOpenFileName(fileName, &err);
if (NULL != gifFile) if (NULL == gifFile)
{ {
*isGif = HGTRUE; return HGBASE_ERR_FILEERROR;
DGifCloseFile(gifFile, &err);
} }
*isGif = HGTRUE;
DGifCloseFile(gifFile, &err);
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
@ -587,7 +597,7 @@ HGResult HGAPI HGImgFmt_RetrieveImageFromGifReader(HGGifReader reader, HGUInt* i
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
if (HGBASE_IMGORIGIN_TOP != imgOrigin && HGBASE_IMGORIGIN_BOTTOM != imgOrigin) if (0 != imgOrigin && HGBASE_IMGORIGIN_TOP != imgOrigin && HGBASE_IMGORIGIN_BOTTOM != imgOrigin)
{ {
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
@ -615,6 +625,11 @@ HGResult HGAPI HGImgFmt_RetrieveImageFromGifReader(HGGifReader reader, HGUInt* i
imgType = HGBASE_IMGTYPE_RGB; imgType = HGBASE_IMGTYPE_RGB;
} }
if (0 == imgOrigin)
{
imgOrigin = HGBASE_IMGORIGIN_TOP;
}
HGImageInfo gifImageInfo; HGImageInfo gifImageInfo;
gifImageInfo.width = gifReaderImpl->m_gifFile->SWidth; gifImageInfo.width = gifReaderImpl->m_gifFile->SWidth;
gifImageInfo.height = gifReaderImpl->m_gifFile->SHeight; gifImageInfo.height = gifReaderImpl->m_gifFile->SHeight;
@ -745,11 +760,11 @@ HGResult HGAPI HGImgFmt_LoadGifImage(const HGChar* fileName, HGGifLoadInfo* info
if (NULL != image) if (NULL != image)
{ {
HGImgFmt_RetrieveImageFromGifReader(reader, NULL, interval, imgType, imgOrigin, image); ret = HGImgFmt_RetrieveImageFromGifReader(reader, NULL, interval, imgType, imgOrigin, image);
} }
HGImgFmt_CloseGifReader(reader); HGImgFmt_CloseGifReader(reader);
return HGBASE_ERR_OK; return ret;
} }
HGResult HGAPI HGImgFmt_OpenGifWriter(const HGChar* fileName, const HGGifSaveInfo* info, HGGifWriter* writer) HGResult HGAPI HGImgFmt_OpenGifWriter(const HGChar* fileName, const HGGifSaveInfo* info, HGGifWriter* writer)
@ -963,7 +978,7 @@ HGResult HGAPI HGImgFmt_SaveImageToGifWriter(HGGifWriter writer, HGUInt interval
if (NULL == rasterBits) if (NULL == rasterBits)
{ {
GifFreeMapObject(colorMap); GifFreeMapObject(colorMap);
return HGIMGFMT_ERR_FAIL; return HGBASE_ERR_OUTOFMEMORY;
} }
if (GifQuantizeBuffer(gifWidth, gifHeight, &mapSize, redBuffer, greenBuffer, blueBuffer, if (GifQuantizeBuffer(gifWidth, gifHeight, &mapSize, redBuffer, greenBuffer, blueBuffer,

View File

@ -47,7 +47,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isJpeg = HGFALSE; HGBool isJpeg = HGFALSE;
HGImgFmt_CheckJpegFile(fileName, &isJpeg); HGResult ret = HGImgFmt_CheckJpegFile(fileName, &isJpeg);
if (isJpeg) if (isJpeg)
{ {
*fmtType = HGIMGFMT_TYPE_JPEG; *fmtType = HGIMGFMT_TYPE_JPEG;
@ -55,7 +55,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isBmp = HGFALSE; HGBool isBmp = HGFALSE;
HGImgFmt_CheckBmpFile(fileName, &isBmp); ret = HGImgFmt_CheckBmpFile(fileName, &isBmp);
if (isBmp) if (isBmp)
{ {
*fmtType = HGIMGFMT_TYPE_BMP; *fmtType = HGIMGFMT_TYPE_BMP;
@ -63,7 +63,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isPng = HGFALSE; HGBool isPng = HGFALSE;
HGImgFmt_CheckPngFile(fileName, &isPng); ret = HGImgFmt_CheckPngFile(fileName, &isPng);
if (isPng) if (isPng)
{ {
*fmtType = HGIMGFMT_TYPE_PNG; *fmtType = HGIMGFMT_TYPE_PNG;
@ -71,7 +71,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isTiff = HGFALSE; HGBool isTiff = HGFALSE;
HGImgFmt_CheckTiffFile(fileName, &isTiff); ret = HGImgFmt_CheckTiffFile(fileName, &isTiff);
if (isTiff) if (isTiff)
{ {
*fmtType = HGIMGFMT_TYPE_TIFF; *fmtType = HGIMGFMT_TYPE_TIFF;
@ -79,7 +79,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isPdf = HGFALSE; HGBool isPdf = HGFALSE;
HGImgFmt_CheckPdfFile(fileName, &isPdf); ret = HGImgFmt_CheckPdfFile(fileName, &isPdf);
if (isPdf) if (isPdf)
{ {
*fmtType = HGIMGFMT_TYPE_PDF; *fmtType = HGIMGFMT_TYPE_PDF;
@ -87,7 +87,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isOfd = HGFALSE; HGBool isOfd = HGFALSE;
HGImgFmt_CheckOfdFile(fileName, &isOfd); ret = HGImgFmt_CheckOfdFile(fileName, &isOfd);
if (isOfd) if (isOfd)
{ {
*fmtType = HGIMGFMT_TYPE_OFD; *fmtType = HGIMGFMT_TYPE_OFD;
@ -95,7 +95,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isGif = HGFALSE; HGBool isGif = HGFALSE;
HGImgFmt_CheckGifFile(fileName, &isGif); ret = HGImgFmt_CheckGifFile(fileName, &isGif);
if (isGif) if (isGif)
{ {
*fmtType = HGIMGFMT_TYPE_GIF; *fmtType = HGIMGFMT_TYPE_GIF;
@ -103,14 +103,14 @@ HGResult HGAPI HGImgFmt_GetImgFmtType(const HGChar* fileName, HGUInt* fmtType)
} }
HGBool isPnm = HGFALSE; HGBool isPnm = HGFALSE;
HGImgFmt_CheckPnmFile(fileName, &isPnm); ret = HGImgFmt_CheckPnmFile(fileName, &isPnm);
if (isPnm) if (isPnm)
{ {
*fmtType = HGIMGFMT_TYPE_PNM; *fmtType = HGIMGFMT_TYPE_PNM;
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
return HGBASE_ERR_FAIL; return ret;
} }
HGResult HGAPI HGImgFmt_GetImgFmtTypeFromFileName(const HGChar* fileName, HGUInt* fmtType) HGResult HGAPI HGImgFmt_GetImgFmtTypeFromFileName(const HGChar* fileName, HGUInt* fmtType)
@ -123,7 +123,7 @@ HGResult HGAPI HGImgFmt_GetImgFmtTypeFromFileName(const HGChar* fileName, HGUInt
const char* p = strrchr(fileName, '.'); const char* p = strrchr(fileName, '.');
if (NULL == p) if (NULL == p)
{ {
return HGBASE_ERR_FAIL; return HGBASE_ERR_INVALIDARG;
} }
#if defined(HG_CMP_MSC) #if defined(HG_CMP_MSC)
@ -443,7 +443,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
assert(0 == fmtType); assert(0 == fmtType);
HGJpegLoadInfo jpegInfo; HGJpegLoadInfo jpegInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadJpegImage(fileName, &jpegInfo, imgType, imgOrigin, image)) HGResult ret = HGImgFmt_LoadJpegImage(fileName, &jpegInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -468,7 +469,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGBmpLoadInfo bmpInfo; HGBmpLoadInfo bmpInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadBmpImage(fileName, &bmpInfo, imgType, imgOrigin, image)) ret = HGImgFmt_LoadBmpImage(fileName, &bmpInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -483,7 +485,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGPngLoadInfo pngInfo; HGPngLoadInfo pngInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadPngImage(fileName, &pngInfo, imgType, imgOrigin, image)) ret = HGImgFmt_LoadPngImage(fileName, &pngInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -503,7 +506,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGTiffLoadInfo tiffInfo; HGTiffLoadInfo tiffInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadTiffImage(fileName, &tiffInfo, imgType, imgOrigin, image)) ret = HGImgFmt_LoadTiffImage(fileName, &tiffInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -528,7 +532,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGPdfPageInfo pdfInfo; HGPdfPageInfo pdfInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadPdfImage(fileName, &pdfInfo, imgType, imgOrigin, image)) ret = HGImgFmt_LoadPdfImage(fileName, &pdfInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -543,7 +548,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGOfdPageInfo ofdInfo; HGOfdPageInfo ofdInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadOfdImage(fileName, &ofdInfo, imgType, imgOrigin, image)) ret = HGImgFmt_LoadOfdImage(fileName, &ofdInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -558,7 +564,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGGifLoadInfo gifInfo; HGGifLoadInfo gifInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadGifImage(fileName, &gifInfo, NULL, imgType, imgOrigin, image)) ret = HGImgFmt_LoadGifImage(fileName, &gifInfo, NULL, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -573,7 +580,8 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
} }
HGPnmLoadInfo pnmInfo; HGPnmLoadInfo pnmInfo;
if (HGBASE_ERR_OK == HGImgFmt_LoadPnmImage(fileName, &pnmInfo, imgType, imgOrigin, image)) ret = HGImgFmt_LoadPnmImage(fileName, &pnmInfo, imgType, imgOrigin, image);
if (HGBASE_ERR_OK == ret)
{ {
if (NULL != info) if (NULL != info)
{ {
@ -591,7 +599,7 @@ HGResult HGAPI HGImgFmt_LoadImage(const HGChar* fileName, HGUInt fmtType, HGImgF
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
return HGBASE_ERR_FAIL; return ret;
} }
HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtSaveInfo* info, const HGChar* fileName) HGResult HGAPI HGImgFmt_SaveImage(HGImage image, HGUInt fmtType, const HGImgFmtSaveInfo* info, const HGChar* fileName)
@ -804,7 +812,7 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
assert(0 == fmtType); assert(0 == fmtType);
HGBool isJpeg = HGFALSE; HGBool isJpeg = HGFALSE;
HGImgFmt_CheckJpegFile(fileName, &isJpeg); HGResult ret = HGImgFmt_CheckJpegFile(fileName, &isJpeg);
if (isJpeg) if (isJpeg)
{ {
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl; HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
@ -816,7 +824,7 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
} }
HGBool isBmp = HGFALSE; HGBool isBmp = HGFALSE;
HGImgFmt_CheckBmpFile(fileName, &isBmp); ret = HGImgFmt_CheckBmpFile(fileName, &isBmp);
if (isBmp) if (isBmp)
{ {
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl; HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
@ -828,7 +836,7 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
} }
HGBool isPng = HGFALSE; HGBool isPng = HGFALSE;
HGImgFmt_CheckPngFile(fileName, &isPng); ret = HGImgFmt_CheckPngFile(fileName, &isPng);
if (isPng) if (isPng)
{ {
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl; HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
@ -840,7 +848,7 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
} }
HGTiffReader tiffReader = NULL; HGTiffReader tiffReader = NULL;
HGResult ret = HGImgFmt_OpenTiffReader(fileName, &tiffReader); ret = HGImgFmt_OpenTiffReader(fileName, &tiffReader);
if (HGBASE_ERR_OK == ret) if (HGBASE_ERR_OK == ret)
{ {
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl; HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
@ -890,7 +898,7 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
} }
HGBool isPnm = HGFALSE; HGBool isPnm = HGFALSE;
HGImgFmt_CheckPnmFile(fileName, &isPnm); ret = HGImgFmt_CheckPnmFile(fileName, &isPnm);
if (isPnm) if (isPnm)
{ {
HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl; HGImgFmtReaderImpl* imgFmtReaderImpl = new HGImgFmtReaderImpl;
@ -901,7 +909,7 @@ HGResult HGAPI HGImgFmt_OpenImageReader(const HGChar* fileName, HGUInt fmtType,
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
return HGBASE_ERR_FAIL; return ret;
} }
HGResult HGAPI HGImgFmt_CloseImageReader(HGImgFmtReader reader) HGResult HGAPI HGImgFmt_CloseImageReader(HGImgFmtReader reader)

View File

@ -17,7 +17,7 @@ METHODDEF(void) my_error_exit(j_common_ptr cinfo)
{ {
my_error_mgr* myerr = (my_error_mgr*)cinfo->err; my_error_mgr* myerr = (my_error_mgr*)cinfo->err;
(*cinfo->err->output_message)(cinfo); (*cinfo->err->output_message)(cinfo);
longjmp(myerr->setjmp_buffer, (int)HGBASE_ERR_FAIL); longjmp(myerr->setjmp_buffer, (int)HGIMGFMT_ERR_FAIL);
} }
HGResult HGAPI HGImgFmt_CheckJpegFile(const HGChar* fileName, HGBool* isJpeg) HGResult HGAPI HGImgFmt_CheckJpegFile(const HGChar* fileName, HGBool* isJpeg)
@ -29,8 +29,13 @@ HGResult HGAPI HGImgFmt_CheckJpegFile(const HGChar* fileName, HGBool* isJpeg)
HGJpegLoadInfo info; HGJpegLoadInfo info;
HGResult ret = HGImgFmt_LoadJpegImage(fileName, &info, 0, 0, NULL); HGResult ret = HGImgFmt_LoadJpegImage(fileName, &info, 0, 0, NULL);
*isJpeg = (HGBASE_ERR_OK == ret ? HGTRUE : HGFALSE); if (HGBASE_ERR_OK != ret)
return HGBASE_ERR_OK; {
return ret;
}
*isJpeg = HGTRUE;
return ret;
} }
HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* info, HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* info,
@ -129,10 +134,11 @@ HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* in
cinfo.out_color_space = JCS_RGB; cinfo.out_color_space = JCS_RGB;
jpeg_start_decompress(&cinfo); jpeg_start_decompress(&cinfo);
if (HGBASE_ERR_OK != HGBase_CreateImage(cinfo.output_width, cinfo.output_height, HGResult ret = HGBase_CreateImage(cinfo.output_width, cinfo.output_height,
HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2)) HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); longjmp(jerr.setjmp_buffer, (int)ret);
} }
if (1 == cinfo.density_unit) if (1 == cinfo.density_unit)
@ -159,9 +165,10 @@ HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* in
jpeg_finish_decompress(&cinfo); jpeg_finish_decompress(&cinfo);
if (HGBASE_ERR_OK != HGBase_CloneImage(image2, imgType, imgOrigin, image)) ret = HGBase_CloneImage(image2, imgType, imgOrigin, image);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); longjmp(jerr.setjmp_buffer, (int)ret);
} }
} }
@ -257,10 +264,11 @@ HGResult HGAPI HGImgFmt_LoadJpegImageFromBuffer(HGBuffer buffer, HGJpegLoadInfo*
cinfo.out_color_space = JCS_RGB; cinfo.out_color_space = JCS_RGB;
jpeg_start_decompress(&cinfo); jpeg_start_decompress(&cinfo);
if (HGBASE_ERR_OK != HGBase_CreateImage(cinfo.output_width, cinfo.output_height, HGResult ret = HGBase_CreateImage(cinfo.output_width, cinfo.output_height,
HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2)) HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); longjmp(jerr.setjmp_buffer, (int)ret);
} }
if (1 == cinfo.density_unit) if (1 == cinfo.density_unit)
@ -287,9 +295,10 @@ HGResult HGAPI HGImgFmt_LoadJpegImageFromBuffer(HGBuffer buffer, HGJpegLoadInfo*
jpeg_finish_decompress(&cinfo); jpeg_finish_decompress(&cinfo);
if (HGBASE_ERR_OK != HGBase_CloneImage(image2, imgType, imgOrigin, image)) ret = HGBase_CloneImage(image2, imgType, imgOrigin, image);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); longjmp(jerr.setjmp_buffer, (int)ret);
} }
} }
@ -347,13 +356,15 @@ HGResult HGAPI HGImgFmt_SaveJpegImage(HGImage image, const HGJpegSaveInfo* info,
HGBase_GetImageInfo(image, &imgInfo); HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_GRAY == imgInfo.type || HGBASE_IMGTYPE_BINARY == imgInfo.type) if (HGBASE_IMGTYPE_GRAY == imgInfo.type || HGBASE_IMGTYPE_BINARY == imgInfo.type)
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_GRAY, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_GRAY, HGBASE_IMGORIGIN_TOP, &image2);
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); if (HGBASE_ERR_OK != ret)
longjmp(jerr.setjmp_buffer, (int)ret);
} }
else else
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); if (HGBASE_ERR_OK != ret)
longjmp(jerr.setjmp_buffer, (int)ret);
} }
HGBase_GetImageInfo(image2, &imgInfo); HGBase_GetImageInfo(image2, &imgInfo);
@ -453,13 +464,15 @@ HGResult HGAPI HGImgFmt_SaveJpegImageToBuffer(HGImage image, const HGJpegSaveInf
HGBase_GetImageInfo(image, &imgInfo); HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_GRAY == imgInfo.type || HGBASE_IMGTYPE_BINARY == imgInfo.type) if (HGBASE_IMGTYPE_GRAY == imgInfo.type || HGBASE_IMGTYPE_BINARY == imgInfo.type)
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_GRAY, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_GRAY, HGBASE_IMGORIGIN_TOP, &image2);
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); if (HGBASE_ERR_OK != ret)
longjmp(jerr.setjmp_buffer, (int)ret);
} }
else else
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
longjmp(jerr.setjmp_buffer, (int)HGBASE_ERR_FAIL); if (HGBASE_ERR_OK != ret)
longjmp(jerr.setjmp_buffer, (int)ret);
} }
HGBase_GetImageInfo(image2, &imgInfo); HGBase_GetImageInfo(image2, &imgInfo);

View File

@ -8,15 +8,16 @@ HGResult HGAPI HGImgFmt_CheckOfdFile(const HGChar* fileName, HGBool* isOfd)
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
*isOfd = HGFALSE;
HGOfdReader reader = NULL; HGOfdReader reader = NULL;
HGImgFmt_OpenOfdReader(fileName, &reader); HGResult ret = HGImgFmt_OpenOfdReader(fileName, &reader);
if (NULL != reader) if (HGBASE_ERR_OK != ret)
{ {
*isOfd = HGTRUE; return ret;
HGImgFmt_CloseOfdReader(reader);
} }
return HGBASE_ERR_OK;
*isOfd = HGTRUE;
HGImgFmt_CloseOfdReader(reader);
return ret;
} }
HGResult HGAPI HGImgFmt_OpenOfdReader(const HGChar* fileName, HGOfdReader* reader) HGResult HGAPI HGImgFmt_OpenOfdReader(const HGChar* fileName, HGOfdReader* reader)

View File

@ -41,11 +41,12 @@ HGResult HGOfdReaderImpl::Open(const HGChar* fileName)
} }
std::string content; std::string content;
if (!ReadXml("Doc_0/Document.xml", content)) HGResult ret = ReadXml("Doc_0/Document.xml", content);
if (HGBASE_ERR_OK != ret)
{ {
zip_close(m_zip); zip_close(m_zip);
m_zip = NULL; m_zip = NULL;
return HGBASE_ERR_FAIL; return ret;
} }
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -78,7 +79,7 @@ HGResult HGOfdReaderImpl::Open(const HGChar* fileName)
} }
} }
return HGBASE_ERR_OK; return ret;
} }
HGResult HGOfdReaderImpl::Close() HGResult HGOfdReaderImpl::Close()
@ -156,9 +157,10 @@ HGResult HGOfdReaderImpl::GetPageInfo(HGUInt page, HGOfdPageInfo* info)
sprintf(name, "Doc_0/%s", m_contentNames[page].c_str()); sprintf(name, "Doc_0/%s", m_contentNames[page].c_str());
std::string content; std::string content;
if (!ReadXml(name, content)) HGResult ret = ReadXml(name, content);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -216,12 +218,13 @@ HGResult HGOfdReaderImpl::GetPageInfo(HGUInt page, HGOfdPageInfo* info)
if (resId.empty()) if (resId.empty())
{ {
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
if (!ReadXml("Doc_0/DocumentRes.xml", content)) ret = ReadXml("Doc_0/DocumentRes.xml", content);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
std::string imgName; std::string imgName;
@ -277,22 +280,23 @@ HGResult HGOfdReaderImpl::GetPageInfo(HGUInt page, HGOfdPageInfo* info)
if (imgName.empty()) if (imgName.empty())
{ {
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
char img_name[128]; char img_name[128];
sprintf(img_name, "Doc_0/Res/%s", imgName.c_str()); sprintf(img_name, "Doc_0/Res/%s", imgName.c_str());
HGJpegLoadInfo jpegInfo; HGJpegLoadInfo jpegInfo;
if (!ReadJpeg(img_name, &jpegInfo, 0, 0, 0, 0, NULL)) HGResult ret = ReadJpeg(img_name, &jpegInfo, 0, 0, 0, 0, NULL);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
info->width = jpegInfo.width; info->width = jpegInfo.width;
info->height = jpegInfo.height; info->height = jpegInfo.height;
info->bpp = jpegInfo.numComponents * 8; info->bpp = jpegInfo.numComponents * 8;
return HGBASE_ERR_OK; return ret;
} }
HGResult HGOfdReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale, HGResult HGOfdReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
@ -317,9 +321,10 @@ HGResult HGOfdReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
sprintf(name, "Doc_0/%s", m_contentNames[page].c_str()); sprintf(name, "Doc_0/%s", m_contentNames[page].c_str());
std::string content; std::string content;
if (!ReadXml(name, content)) HGResult ret = ReadXml(name, content);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -377,12 +382,13 @@ HGResult HGOfdReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
if (resId.empty()) if (resId.empty())
{ {
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
if (!ReadXml("Doc_0/DocumentRes.xml", content)) ret = ReadXml("Doc_0/DocumentRes.xml", content);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
std::string imgName; std::string imgName;
@ -438,20 +444,21 @@ HGResult HGOfdReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
if (imgName.empty()) if (imgName.empty())
{ {
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
char img_name[128]; char img_name[128];
sprintf(img_name, "Doc_0/Res/%s", imgName.c_str()); sprintf(img_name, "Doc_0/Res/%s", imgName.c_str());
if (!ReadJpeg(img_name, NULL, xScale, yScale, imgType, imgOrigin, image)) HGResult ret = ReadJpeg(img_name, NULL, xScale, yScale, imgType, imgOrigin, image);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
return HGBASE_ERR_OK; return ret;
} }
bool HGOfdReaderImpl::ReadXml(const char* name, std::string& content) HGResult HGOfdReaderImpl::ReadXml(const char* name, std::string& content)
{ {
struct zip_stat st; struct zip_stat st;
zip_stat_init(&st); zip_stat_init(&st);
@ -460,20 +467,20 @@ bool HGOfdReaderImpl::ReadXml(const char* name, std::string& content)
zip_int64_t size = st.size; zip_int64_t size = st.size;
if (0 == size) if (0 == size)
{ {
return false; return HGIMGFMT_ERR_FAIL;
} }
zip_file* file = zip_fopen(m_zip, name, ZIP_FL_NOCASE); zip_file* file = zip_fopen(m_zip, name, ZIP_FL_NOCASE);
if (NULL == file) if (NULL == file)
{ {
return false; return HGIMGFMT_ERR_FAIL;
} }
char* s = (char*)malloc((size_t)size + 1); char* s = (char*)malloc((size_t)size + 1);
if (NULL == s) if (NULL == s)
{ {
zip_fclose(file); zip_fclose(file);
return false; return HGBASE_ERR_OUTOFMEMORY;
} }
zip_int64_t did_read = zip_fread(file, s, size); zip_int64_t did_read = zip_fread(file, s, size);
@ -481,7 +488,7 @@ bool HGOfdReaderImpl::ReadXml(const char* name, std::string& content)
{ {
free(s); free(s);
zip_fclose(file); zip_fclose(file);
return false; return HGIMGFMT_ERR_FAIL;
} }
s[size] = 0; s[size] = 0;
@ -489,10 +496,10 @@ bool HGOfdReaderImpl::ReadXml(const char* name, std::string& content)
free(s); free(s);
zip_fclose(file); zip_fclose(file);
return true; return HGBASE_ERR_OK;
} }
bool HGOfdReaderImpl::ReadJpeg(const char* name, HGJpegLoadInfo* info, HGFloat xScale, HGFloat yScale, HGUInt imgType, HGUInt imgOrigin, HGImage* image) HGResult HGOfdReaderImpl::ReadJpeg(const char* name, HGJpegLoadInfo* info, HGFloat xScale, HGFloat yScale, HGUInt imgType, HGUInt imgOrigin, HGImage* image)
{ {
struct zip_stat st; struct zip_stat st;
zip_stat_init(&st); zip_stat_init(&st);
@ -501,20 +508,20 @@ bool HGOfdReaderImpl::ReadJpeg(const char* name, HGJpegLoadInfo* info, HGFloat x
zip_int64_t size = st.size; zip_int64_t size = st.size;
if (0 == size) if (0 == size)
{ {
return false; return HGIMGFMT_ERR_FAIL;
} }
zip_file* file = zip_fopen(m_zip, name, ZIP_FL_NOCASE); zip_file* file = zip_fopen(m_zip, name, ZIP_FL_NOCASE);
if (NULL == file) if (NULL == file)
{ {
return false; return HGIMGFMT_ERR_FAIL;
} }
unsigned char* content = (unsigned char*)malloc((size_t)size); unsigned char* content = (unsigned char*)malloc((size_t)size);
if (NULL == content) if (NULL == content)
{ {
zip_fclose(file); zip_fclose(file);
return false; return HGBASE_ERR_OUTOFMEMORY;
} }
zip_int64_t did_read = zip_fread(file, content, size); zip_int64_t did_read = zip_fread(file, content, size);
@ -522,7 +529,7 @@ bool HGOfdReaderImpl::ReadJpeg(const char* name, HGJpegLoadInfo* info, HGFloat x
{ {
free(content); free(content);
zip_fclose(file); zip_fclose(file);
return false; return HGIMGFMT_ERR_FAIL;
} }
HGBuffer buffer = NULL; HGBuffer buffer = NULL;
@ -532,7 +539,7 @@ bool HGOfdReaderImpl::ReadJpeg(const char* name, HGJpegLoadInfo* info, HGFloat x
free(content); free(content);
zip_fclose(file); zip_fclose(file);
return (HGBASE_ERR_OK == ret); return ret;
} }
@ -566,14 +573,23 @@ HGResult HGOfdImageWriterImpl::Open(const HGChar* fileName)
zip_add_dir(m_zip, "Doc_0/Pages"); zip_add_dir(m_zip, "Doc_0/Pages");
zip_add_dir(m_zip, "Doc_0/Res"); zip_add_dir(m_zip, "Doc_0/Res");
if (!AddOfdXml() || !AddPublicResXml()) HGResult ret = AddOfdXml();
if (HGBASE_ERR_OK != ret)
{ {
zip_close(m_zip); zip_close(m_zip);
m_zip = NULL; m_zip = NULL;
return HGBASE_ERR_FAIL; return ret;
} }
return HGBASE_ERR_OK; ret = AddPublicResXml();
if (HGBASE_ERR_OK != ret)
{
zip_close(m_zip);
m_zip = NULL;
return ret;
}
return ret;
} }
HGResult HGOfdImageWriterImpl::Close() HGResult HGOfdImageWriterImpl::Close()
@ -604,9 +620,10 @@ HGResult HGOfdImageWriterImpl::SaveJpegImage(HGImage image, const HGJpegSaveInfo
{ {
HGChar name[128]; HGChar name[128];
sprintf(name, "Doc_0/Res/image_%u.jpg", m_curImgIndex); sprintf(name, "Doc_0/Res/image_%u.jpg", m_curImgIndex);
if (!AddJpegImageFile(image, info, name)) HGResult ret = AddJpegImageFile(image, info, name);
if (HGBASE_ERR_OK != ret)
{ {
return HGBASE_ERR_FAIL; return ret;
} }
HGUInt xDpi, yDpi; HGUInt xDpi, yDpi;
@ -635,7 +652,7 @@ HGResult HGOfdImageWriterImpl::SaveJpegImage(HGImage image, const HGJpegSaveInfo
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
bool HGOfdImageWriterImpl::AddOfdXml() HGResult HGOfdImageWriterImpl::AddOfdXml()
{ {
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -686,7 +703,7 @@ bool HGOfdImageWriterImpl::AddOfdXml()
return AddXmlFile(xmlDoc, "OFD.xml"); return AddXmlFile(xmlDoc, "OFD.xml");
} }
bool HGOfdImageWriterImpl::AddDocXml() HGResult HGOfdImageWriterImpl::AddDocXml()
{ {
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -742,7 +759,7 @@ bool HGOfdImageWriterImpl::AddDocXml()
return AddXmlFile(xmlDoc, "Doc_0/Document.xml"); return AddXmlFile(xmlDoc, "Doc_0/Document.xml");
} }
bool HGOfdImageWriterImpl::AddDocResXml() HGResult HGOfdImageWriterImpl::AddDocResXml()
{ {
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -773,7 +790,7 @@ bool HGOfdImageWriterImpl::AddDocResXml()
return AddXmlFile(xmlDoc, "Doc_0/DocumentRes.xml"); return AddXmlFile(xmlDoc, "Doc_0/DocumentRes.xml");
} }
bool HGOfdImageWriterImpl::AddPublicResXml() HGResult HGOfdImageWriterImpl::AddPublicResXml()
{ {
tinyxml2::XMLDocument xmlDoc; tinyxml2::XMLDocument xmlDoc;
@ -788,20 +805,20 @@ bool HGOfdImageWriterImpl::AddPublicResXml()
return AddXmlFile(xmlDoc, "Doc_0/PublicRes.xml"); return AddXmlFile(xmlDoc, "Doc_0/PublicRes.xml");
} }
bool HGOfdImageWriterImpl::AddXmlFile(tinyxml2::XMLDocument& xmlDoc, const HGChar* name) HGResult HGOfdImageWriterImpl::AddXmlFile(tinyxml2::XMLDocument& xmlDoc, const HGChar* name)
{ {
HGChar tmpName[256]; HGChar tmpName[256];
HGBase_GetTmpFileName(NULL, tmpName, 256); HGBase_GetTmpFileName(NULL, tmpName, 256);
if (tinyxml2::XML_SUCCESS != xmlDoc.SaveFile(tmpName)) if (tinyxml2::XML_SUCCESS != xmlDoc.SaveFile(tmpName))
{ {
return false; return HGIMGFMT_ERR_FAIL;
} }
zip_source_t* s = zip_source_file(m_zip, tmpName, 0, 0); zip_source_t* s = zip_source_file(m_zip, tmpName, 0, 0);
if (NULL == s) if (NULL == s)
{ {
HGBase_DeleteFile(tmpName); HGBase_DeleteFile(tmpName);
return false; return HGIMGFMT_ERR_FAIL;
} }
zip_int64_t ret = zip_file_add(m_zip, name, s, ZIP_FL_ENC_UTF_8 | ZIP_FL_OVERWRITE); zip_int64_t ret = zip_file_add(m_zip, name, s, ZIP_FL_ENC_UTF_8 | ZIP_FL_OVERWRITE);
@ -809,27 +826,28 @@ bool HGOfdImageWriterImpl::AddXmlFile(tinyxml2::XMLDocument& xmlDoc, const HGCha
{ {
zip_source_free(s); zip_source_free(s);
HGBase_DeleteFile(tmpName); HGBase_DeleteFile(tmpName);
return false; return HGIMGFMT_ERR_FAIL;
} }
m_tmpFiles.push_back(tmpName); m_tmpFiles.push_back(tmpName);
return true; return HGBASE_ERR_OK;
} }
bool HGOfdImageWriterImpl::AddJpegImageFile(HGImage image, const HGJpegSaveInfo* info, const HGChar* name) HGResult HGOfdImageWriterImpl::AddJpegImageFile(HGImage image, const HGJpegSaveInfo* info, const HGChar* name)
{ {
HGChar tmpName[256]; HGChar tmpName[256];
HGBase_GetTmpFileName(NULL, tmpName, 256); HGBase_GetTmpFileName(NULL, tmpName, 256);
if (HGBASE_ERR_OK != HGImgFmt_SaveJpegImage(image, info, tmpName)) HGResult ret = HGImgFmt_SaveJpegImage(image, info, tmpName);
if (HGBASE_ERR_OK != ret)
{ {
return false; return ret;
} }
zip_source_t* s = zip_source_file(m_zip, tmpName, 0, 0); zip_source_t* s = zip_source_file(m_zip, tmpName, 0, 0);
if (NULL == s) if (NULL == s)
{ {
HGBase_DeleteFile(tmpName); HGBase_DeleteFile(tmpName);
return false; return HGIMGFMT_ERR_FAIL;
} }
zip_int64_t ret = zip_file_add(m_zip, name, s, ZIP_FL_OVERWRITE); zip_int64_t ret = zip_file_add(m_zip, name, s, ZIP_FL_OVERWRITE);
@ -837,14 +855,14 @@ bool HGOfdImageWriterImpl::AddJpegImageFile(HGImage image, const HGJpegSaveInfo*
{ {
zip_source_free(s); zip_source_free(s);
HGBase_DeleteFile(tmpName); HGBase_DeleteFile(tmpName);
return false; return HGIMGFMT_ERR_FAIL;
} }
m_tmpFiles.push_back(tmpName); m_tmpFiles.push_back(tmpName);
return true; return HGBASE_ERR_OK;
} }
bool HGOfdImageWriterImpl::AddContentXmlFile(HGUInt index, HGFloat physicalWidth, HGFloat physicalHeight) HGResult HGOfdImageWriterImpl::AddContentXmlFile(HGUInt index, HGFloat physicalWidth, HGFloat physicalHeight)
{ {
HGChar dir[128]; HGChar dir[128];
sprintf(dir, "Doc_0/Pages/Page_%u", index); sprintf(dir, "Doc_0/Pages/Page_%u", index);

View File

@ -25,8 +25,8 @@ public:
HGUInt imgType, HGUInt imgOrigin, HGImage* image); HGUInt imgType, HGUInt imgOrigin, HGImage* image);
private: private:
bool ReadXml(const char *name, std::string &content); HGResult ReadXml(const char *name, std::string &content);
bool ReadJpeg(const char* name, HGJpegLoadInfo *info, HGFloat xScale, HGFloat yScale, HGUInt imgType, HGUInt imgOrigin, HGImage* image); HGResult ReadJpeg(const char* name, HGJpegLoadInfo *info, HGFloat xScale, HGFloat yScale, HGUInt imgType, HGUInt imgOrigin, HGImage* image);
private: private:
zip* m_zip; zip* m_zip;
@ -44,13 +44,13 @@ public:
HGResult SaveJpegImage(HGImage image, const HGJpegSaveInfo* info); HGResult SaveJpegImage(HGImage image, const HGJpegSaveInfo* info);
private: private:
bool AddOfdXml(); HGResult AddOfdXml();
bool AddDocXml(); HGResult AddDocXml();
bool AddDocResXml(); HGResult AddDocResXml();
bool AddPublicResXml(); HGResult AddPublicResXml();
bool AddXmlFile(tinyxml2::XMLDocument &xmlDoc, const HGChar *name); HGResult AddXmlFile(tinyxml2::XMLDocument &xmlDoc, const HGChar *name);
bool AddJpegImageFile(HGImage image, const HGJpegSaveInfo* info, const HGChar* name); HGResult AddJpegImageFile(HGImage image, const HGJpegSaveInfo* info, const HGChar* name);
bool AddContentXmlFile(HGUInt index, HGFloat physicalWidth, HGFloat physicalHeight); HGResult AddContentXmlFile(HGUInt index, HGFloat physicalWidth, HGFloat physicalHeight);
private: private:
zip* m_zip; zip* m_zip;

View File

@ -8,15 +8,16 @@ HGResult HGAPI HGImgFmt_CheckPdfFile(const HGChar* fileName, HGBool* isPdf)
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
*isPdf = HGFALSE;
HGPdfReader reader = NULL; HGPdfReader reader = NULL;
HGImgFmt_OpenPdfReader(fileName, &reader); HGResult ret = HGImgFmt_OpenPdfReader(fileName, &reader);
if (NULL != reader) if (HGBASE_ERR_OK != ret)
{ {
*isPdf = HGTRUE; return ret;
HGImgFmt_ClosePdfReader(reader);
} }
return HGBASE_ERR_OK;
*isPdf = HGTRUE;
HGImgFmt_ClosePdfReader(reader);
return ret;
} }
HGResult HGAPI HGImgFmt_OpenPdfReader(const HGChar* fileName, HGPdfReader* reader) HGResult HGAPI HGImgFmt_OpenPdfReader(const HGChar* fileName, HGPdfReader* reader)

View File

@ -85,10 +85,10 @@ HGResult HGPdfReaderImpl::Open(const HGChar* fileName)
{ {
HGBase_DestroyDll(m_dll); HGBase_DestroyDll(m_dll);
m_dll = NULL; m_dll = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
ret = HGBASE_ERR_FAIL; ret = HGIMGFMT_ERR_FAIL;
fz_try(pContext) fz_try(pContext)
{ {
fz_register_document_handlers(pContext); fz_register_document_handlers(pContext);
@ -137,7 +137,7 @@ HGResult HGPdfReaderImpl::GetPageCount(HGUInt* count)
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
HGResult ret = HGBASE_ERR_FAIL; HGResult ret = HGIMGFMT_ERR_FAIL;
fz_try(m_pContext) fz_try(m_pContext)
{ {
*count = (uint32_t)fz_count_pages(m_pContext, m_pDoc); *count = (uint32_t)fz_count_pages(m_pContext, m_pDoc);
@ -163,7 +163,7 @@ HGResult HGPdfReaderImpl::GetPageInfo(HGUInt page, HGPdfPageInfo* info)
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
HGResult ret = HGBASE_ERR_FAIL; HGResult ret = HGIMGFMT_ERR_FAIL;
fz_page* fzpage = NULL; fz_page* fzpage = NULL;
fz_try(m_pContext) fz_try(m_pContext)
@ -207,7 +207,7 @@ HGResult HGPdfReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
HGResult ret = HGBASE_ERR_FAIL; HGResult ret = HGIMGFMT_ERR_FAIL;
fz_pixmap* pix = NULL; fz_pixmap* pix = NULL;
fz_try(m_pContext) fz_try(m_pContext)
@ -591,7 +591,7 @@ HGResult HGPdfImageWriterImpl::Open(const HGChar* fileName)
{ {
HGBase_DestroyDll(m_dll); HGBase_DestroyDll(m_dll);
m_dll = NULL; m_dll = NULL;
return HGBASE_ERR_OUTOFMEMORY; return HGIMGFMT_ERR_FAIL;
} }
#if defined(HG_CMP_MSC) #if defined(HG_CMP_MSC)
@ -627,7 +627,7 @@ HGResult HGPdfImageWriterImpl::Open(const HGChar* fileName)
PDF_delete(p); PDF_delete(p);
HGBase_DestroyDll(m_dll); HGBase_DestroyDll(m_dll);
m_dll = NULL; m_dll = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
delete[] pUnicode; delete[] pUnicode;
@ -689,7 +689,7 @@ HGResult HGPdfImageWriterImpl::SaveJpegImage(HGImage image, const HGJpegSaveInfo
PDF_CATCH(m_pPdf) PDF_CATCH(m_pPdf)
{ {
HGBase_DestroyBuffer(buffer); HGBase_DestroyBuffer(buffer);
return HGBASE_ERR_OUTOFMEMORY; return HGIMGFMT_ERR_FAIL;
} }
int img = PDF_load_image(m_pPdf, "auto", "virtual_file", 0, "page 1"); int img = PDF_load_image(m_pPdf, "auto", "virtual_file", 0, "page 1");

View File

@ -15,8 +15,13 @@ HGResult HGAPI HGImgFmt_CheckPngFile(const HGChar* fileName, HGBool* isPng)
HGPngLoadInfo info; HGPngLoadInfo info;
HGResult ret = HGImgFmt_LoadPngImage(fileName, &info, 0, 0, NULL); HGResult ret = HGImgFmt_LoadPngImage(fileName, &info, 0, 0, NULL);
*isPng = (HGBASE_ERR_OK == ret ? HGTRUE : HGFALSE); if (HGBASE_ERR_OK != ret)
return HGBASE_ERR_OK; {
return ret;
}
*isPng = HGTRUE;
return ret;
} }
HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info, HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info,
@ -84,7 +89,7 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
{ {
fclose(file); fclose(file);
file = NULL; file = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
png_infop info_ptr = png_create_info_struct(png_ptr); png_infop info_ptr = png_create_info_struct(png_ptr);
@ -93,7 +98,7 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
png_destroy_read_struct(&png_ptr, NULL, NULL); png_destroy_read_struct(&png_ptr, NULL, NULL);
fclose(file); fclose(file);
file = NULL; file = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
uint8_t* buffer = NULL; uint8_t* buffer = NULL;
@ -150,13 +155,13 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
buffer = (uint8_t*)malloc((uintptr_t)info_ptr->rowbytes * (uintptr_t)info_ptr->height); buffer = (uint8_t*)malloc((uintptr_t)info_ptr->rowbytes * (uintptr_t)info_ptr->height);
if (NULL == buffer) if (NULL == buffer)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_OUTOFMEMORY);
} }
rowPointers = (uint8_t**)malloc(info_ptr->height * sizeof(png_bytep)); rowPointers = (uint8_t**)malloc(info_ptr->height * sizeof(png_bytep));
if (NULL == rowPointers) if (NULL == rowPointers)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_OUTOFMEMORY);
} }
//#pragma omp parallel for //#pragma omp parallel for
@ -186,9 +191,10 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
imgOrigin = HGBASE_IMGORIGIN_TOP; imgOrigin = HGBASE_IMGORIGIN_TOP;
} }
if (HGBASE_ERR_OK != HGBase_CreateImage(info_ptr->width, info_ptr->height, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CreateImage(info_ptr->width, info_ptr->height, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)ret);
} }
if (PNG_RESOLUTION_METER == info_ptr->phys_unit_type) if (PNG_RESOLUTION_METER == info_ptr->phys_unit_type)
@ -276,9 +282,10 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
} }
} }
if (HGBASE_ERR_OK != HGBase_CloneImage(image2, imgType, imgOrigin, image)) ret = HGBase_CloneImage(image2, imgType, imgOrigin, image);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)ret);
} }
} }
@ -318,7 +325,7 @@ HGResult HGAPI HGImgFmt_SavePngImage(HGImage image, const HGPngSaveInfo* info, c
{ {
fclose(file); fclose(file);
file = NULL; file = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
png_infop info_ptr = png_create_info_struct(png_ptr); png_infop info_ptr = png_create_info_struct(png_ptr);
@ -327,7 +334,7 @@ HGResult HGAPI HGImgFmt_SavePngImage(HGImage image, const HGPngSaveInfo* info, c
png_destroy_write_struct(&png_ptr, NULL); png_destroy_write_struct(&png_ptr, NULL);
fclose(file); fclose(file);
file = NULL; file = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
uint8_t** rowPointers = NULL; uint8_t** rowPointers = NULL;
@ -357,30 +364,34 @@ HGResult HGAPI HGImgFmt_SavePngImage(HGImage image, const HGPngSaveInfo* info, c
HGBase_GetImageInfo(image, &imgInfo); HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_BGR == imgInfo.type) if (HGBASE_IMGTYPE_BGR == imgInfo.type)
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)ret);
} }
} }
else if (HGBASE_IMGTYPE_BGRA == imgInfo.type) else if (HGBASE_IMGTYPE_BGRA == imgInfo.type)
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)ret);
} }
} }
else if (HGBASE_IMGTYPE_BINARY == imgInfo.type) else if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, HGBASE_IMGTYPE_GRAY, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_GRAY, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)ret);
} }
} }
else else
{ {
if (HGBASE_ERR_OK != HGBase_CloneImage(image, imgInfo.type, HGBASE_IMGORIGIN_TOP, &image2)) HGResult ret = HGBase_CloneImage(image, imgInfo.type, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)ret);
} }
} }
@ -427,7 +438,7 @@ HGResult HGAPI HGImgFmt_SavePngImage(HGImage image, const HGPngSaveInfo* info, c
rowPointers = (uint8_t**)malloc(height * sizeof(png_bytep)); rowPointers = (uint8_t**)malloc(height * sizeof(png_bytep));
if (NULL == rowPointers) if (NULL == rowPointers)
{ {
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL); longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_OUTOFMEMORY);
} }
//#pragma omp parallel for //#pragma omp parallel for

View File

@ -46,8 +46,13 @@ HGResult HGAPI HGImgFmt_CheckPnmFile(const HGChar* fileName, HGBool* isPnm)
HGPnmLoadInfo info; HGPnmLoadInfo info;
HGResult ret = HGImgFmt_LoadPnmImage(fileName, &info, 0, 0, NULL); HGResult ret = HGImgFmt_LoadPnmImage(fileName, &info, 0, 0, NULL);
*isPnm = (HGBASE_ERR_OK == ret ? HGTRUE : HGFALSE); if (HGBASE_ERR_OK != ret)
return HGBASE_ERR_OK; {
return ret;
}
*isPnm = HGTRUE;
return ret;
} }
HGResult HGAPI HGImgFmt_GetPnmTypeFromFileName(const HGChar* fileName, HGUInt* pnmType) HGResult HGAPI HGImgFmt_GetPnmTypeFromFileName(const HGChar* fileName, HGUInt* pnmType)
@ -60,7 +65,7 @@ HGResult HGAPI HGImgFmt_GetPnmTypeFromFileName(const HGChar* fileName, HGUInt* p
const char* p = strrchr(fileName, '.'); const char* p = strrchr(fileName, '.');
if (NULL == p) if (NULL == p)
{ {
return HGBASE_ERR_FAIL; return HGBASE_ERR_INVALIDARG;
} }
#if defined(HG_CMP_MSC) #if defined(HG_CMP_MSC)
@ -119,7 +124,7 @@ static HGResult PnmLoadInfo(FILE* file, HGUInt pnmType, HGUInt *width, HGUInt *h
HGByte c = 0; HGByte c = 0;
if (1 != fread(&c, 1, 1, file)) if (1 != fread(&c, 1, 1, file))
{ {
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
if (c == '#' || c == '\n' || c == '\r' || c == '\t' || c == ' ') if (c == '#' || c == '\n' || c == '\r' || c == '\t' || c == ' ')
@ -132,21 +137,21 @@ static HGResult PnmLoadInfo(FILE* file, HGUInt pnmType, HGUInt *width, HGUInt *h
{ {
*width = MyAtoi(buf); *width = MyAtoi(buf);
if (*width == 0) if (*width == 0)
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
getWidth = true; getWidth = true;
} }
else if (!getHeight) else if (!getHeight)
{ {
*height = MyAtoi(buf); *height = MyAtoi(buf);
if (*height == 0) if (*height == 0)
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
getHeight = true; getHeight = true;
} }
else if (!getMaxColor) else if (!getMaxColor)
{ {
*maxColor = MyAtoi(buf); *maxColor = MyAtoi(buf);
if (*maxColor == 0) if (*maxColor == 0)
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
getMaxColor = true; getMaxColor = true;
} }
@ -159,7 +164,7 @@ static HGResult PnmLoadInfo(FILE* file, HGUInt pnmType, HGUInt *width, HGUInt *h
{ {
if (1 != fread(&c, 1, 1, file)) if (1 != fread(&c, 1, 1, file))
{ {
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
} }
} }
@ -171,7 +176,7 @@ static HGResult PnmLoadInfo(FILE* file, HGUInt pnmType, HGUInt *width, HGUInt *h
} }
else else
{ {
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
if (pnmType != HGIMGFMT_PNMTYPE_BINARY_ASCII && pnmType != HGIMGFMT_PNMTYPE_BINARY_BINARY) if (pnmType != HGIMGFMT_PNMTYPE_BINARY_ASCII && pnmType != HGIMGFMT_PNMTYPE_BINARY_BINARY)
@ -205,7 +210,7 @@ static HGResult PnmLoadImage(FILE* file, HGUInt pnmType, HGPnmLoadInfo* info, HG
if (pnmType != HGIMGFMT_PNMTYPE_BINARY_ASCII && pnmType != HGIMGFMT_PNMTYPE_BINARY_BINARY) if (pnmType != HGIMGFMT_PNMTYPE_BINARY_ASCII && pnmType != HGIMGFMT_PNMTYPE_BINARY_BINARY)
{ {
if (maxColor != 255) if (maxColor != 255)
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
else else
{ {
@ -267,7 +272,7 @@ static HGResult PnmLoadImage(FILE* file, HGUInt pnmType, HGPnmLoadInfo* info, HG
if (lineSize != fread(data + i * imgInfo.widthStep, 1, lineSize, file)) if (lineSize != fread(data + i * imgInfo.widthStep, 1, lineSize, file))
{ {
HGBase_DestroyImage(image2); HGBase_DestroyImage(image2);
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
} }
@ -313,7 +318,7 @@ static HGResult PnmLoadImage(FILE* file, HGUInt pnmType, HGPnmLoadInfo* info, HG
if (pixel < 0 || pixel > maxColor) if (pixel < 0 || pixel > maxColor)
{ {
HGBase_DestroyImage(image2); HGBase_DestroyImage(image2);
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
if (pnmType == HGIMGFMT_PNMTYPE_BINARY_ASCII) if (pnmType == HGIMGFMT_PNMTYPE_BINARY_ASCII)
@ -344,7 +349,7 @@ static HGResult PnmLoadImage(FILE* file, HGUInt pnmType, HGPnmLoadInfo* info, HG
else else
{ {
HGBase_DestroyImage(image2); HGBase_DestroyImage(image2);
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
} }
else if (c == '#') else if (c == '#')
@ -364,7 +369,7 @@ static HGResult PnmLoadImage(FILE* file, HGUInt pnmType, HGPnmLoadInfo* info, HG
if (!getChar) if (!getChar)
{ {
HGBase_DestroyImage(image2); HGBase_DestroyImage(image2);
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
} }
} }
@ -377,7 +382,7 @@ static HGResult PnmLoadImage(FILE* file, HGUInt pnmType, HGPnmLoadInfo* info, HG
else else
{ {
HGBase_DestroyImage(image2); HGBase_DestroyImage(image2);
return HGBASE_ERR_INVALIDDATA; return HGBASE_ERR_FILEERROR;
} }
if (p == data + height * imgInfo.widthStep) if (p == data + height * imgInfo.widthStep)

View File

@ -10,15 +10,16 @@ HGResult HGAPI HGImgFmt_CheckTiffFile(const HGChar* fileName, HGBool* isTiff)
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
} }
*isTiff = HGFALSE;
HGTiffReader reader = NULL; HGTiffReader reader = NULL;
HGImgFmt_OpenTiffReader(fileName, &reader); HGResult ret = HGImgFmt_OpenTiffReader(fileName, &reader);
if (NULL != reader) if (HGBASE_ERR_OK != ret)
{ {
*isTiff = HGTRUE; return ret;
HGImgFmt_CloseTiffReader(reader);
} }
return HGBASE_ERR_OK;
*isTiff = HGTRUE;
HGImgFmt_CloseTiffReader(reader);
return ret;
} }
HGResult HGAPI HGImgFmt_OpenTiffReader(const HGChar* fileName, HGTiffReader* reader) HGResult HGAPI HGImgFmt_OpenTiffReader(const HGChar* fileName, HGTiffReader* reader)
@ -104,7 +105,7 @@ HGResult HGAPI HGImgFmt_LoadImageFromTiffReader(HGTiffReader reader, HGUInt inde
TIFF* tif = (TIFF*)reader; TIFF* tif = (TIFF*)reader;
if (0 == TIFFSetDirectory(tif, index)) if (0 == TIFFSetDirectory(tif, index))
{ {
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
uint32 width; uint32 width;
@ -142,14 +143,14 @@ HGResult HGAPI HGImgFmt_LoadImageFromTiffReader(HGTiffReader reader, HGUInt inde
uint32* buffer = (uint32*)malloc(width * height * sizeof(uint32)); uint32* buffer = (uint32*)malloc(width * height * sizeof(uint32));
if (NULL == buffer) if (NULL == buffer)
{ {
return HGBASE_ERR_FAIL; return HGBASE_ERR_OUTOFMEMORY;
} }
if (0 == TIFFReadRGBAImageOriented(tif, width, height, buffer, ORIENTATION_TOPLEFT)) if (0 == TIFFReadRGBAImageOriented(tif, width, height, buffer, ORIENTATION_TOPLEFT))
{ {
free(buffer); free(buffer);
buffer = NULL; buffer = NULL;
return HGBASE_ERR_FAIL; return HGIMGFMT_ERR_FAIL;
} }
if (0 == imgType) if (0 == imgType)
@ -284,21 +285,30 @@ HGResult HGAPI HGImgFmt_SaveImageToTiffWriter(HGTiffWriter writer, HGImage image
HGBase_GetImageInfo(image, &imgInfo); HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_BGR == imgInfo.type) if (HGBASE_IMGTYPE_BGR == imgInfo.type)
{ {
HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2); HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{
HGBase_SetImageROI(image, &roi);
return ret;
}
} }
else if (HGBASE_IMGTYPE_BGRA == imgInfo.type) else if (HGBASE_IMGTYPE_BGRA == imgInfo.type)
{ {
HGBase_CloneImage(image, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2); HGResult ret = HGBase_CloneImage(image, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2);
if (HGBASE_ERR_OK != ret)
{
HGBase_SetImageROI(image, &roi);
return ret;
}
} }
else else
{ {
HGBase_CloneImage(image, imgInfo.type, HGBASE_IMGORIGIN_TOP, &image2); HGResult ret = HGBase_CloneImage(image, imgInfo.type, HGBASE_IMGORIGIN_TOP, &image2);
} if (HGBASE_ERR_OK != ret)
{
if (NULL == image2) HGBase_SetImageROI(image, &roi);
{ return ret;
HGBase_SetImageROI(image, &roi); }
return HGBASE_ERR_FAIL;
} }
HGBase_GetImageInfo(image2, &imgInfo); HGBase_GetImageInfo(image2, &imgInfo);