ppm格式库调整,考虑文件大小不规范的情况
This commit is contained in:
parent
ec756ddc0f
commit
045ad3fb72
|
@ -74,3 +74,7 @@ HGImgFmt_OpenOfdImageWriter
|
||||||
HGImgFmt_CloseOfdImageWriter
|
HGImgFmt_CloseOfdImageWriter
|
||||||
HGImgFmt_SaveJpegImageToOfdImageWriter
|
HGImgFmt_SaveJpegImageToOfdImageWriter
|
||||||
HGImgFmt_SaveOfdJpegImage
|
HGImgFmt_SaveOfdJpegImage
|
||||||
|
|
||||||
|
HGImgFmt_CheckPnmFile
|
||||||
|
HGImgFmt_LoadPnmImage
|
||||||
|
HGImgFmt_SavePnmImage
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
<ClCompile Include="..\..\..\modules\imgfmt\HGPdf.cpp" />
|
<ClCompile Include="..\..\..\modules\imgfmt\HGPdf.cpp" />
|
||||||
<ClCompile Include="..\..\..\modules\imgfmt\HGPdfImpl.cpp" />
|
<ClCompile Include="..\..\..\modules\imgfmt\HGPdfImpl.cpp" />
|
||||||
<ClCompile Include="..\..\..\modules\imgfmt\HGPng.cpp" />
|
<ClCompile Include="..\..\..\modules\imgfmt\HGPng.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\modules\imgfmt\HGPnm.cpp" />
|
||||||
<ClCompile Include="..\..\..\modules\imgfmt\HGTiff.cpp" />
|
<ClCompile Include="..\..\..\modules\imgfmt\HGTiff.cpp" />
|
||||||
<ClCompile Include="..\..\..\utility\HGString.cpp" />
|
<ClCompile Include="..\..\..\utility\HGString.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -61,6 +62,7 @@
|
||||||
<ClInclude Include="..\..\..\modules\imgfmt\HGPdf.h" />
|
<ClInclude Include="..\..\..\modules\imgfmt\HGPdf.h" />
|
||||||
<ClInclude Include="..\..\..\modules\imgfmt\HGPdfImpl.hpp" />
|
<ClInclude Include="..\..\..\modules\imgfmt\HGPdfImpl.hpp" />
|
||||||
<ClInclude Include="..\..\..\modules\imgfmt\HGPng.h" />
|
<ClInclude Include="..\..\..\modules\imgfmt\HGPng.h" />
|
||||||
|
<ClInclude Include="..\..\..\modules\imgfmt\HGPnm.h" />
|
||||||
<ClInclude Include="..\..\..\modules\imgfmt\HGTiff.h" />
|
<ClInclude Include="..\..\..\modules\imgfmt\HGTiff.h" />
|
||||||
<ClInclude Include="..\..\..\utility\HGString.h" />
|
<ClInclude Include="..\..\..\utility\HGString.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "imgfmt/HGGif.h"
|
#include "imgfmt/HGGif.h"
|
||||||
#include "imgfmt/HGPdf.h"
|
#include "imgfmt/HGPdf.h"
|
||||||
#include "imgfmt/HGOfd.h"
|
#include "imgfmt/HGOfd.h"
|
||||||
|
#include "imgfmt/HGPnm.h"
|
||||||
#include "imgfmt/HGImgFmt.h"
|
#include "imgfmt/HGImgFmt.h"
|
||||||
#include "imgproc/HGImgProc.h"
|
#include "imgproc/HGImgProc.h"
|
||||||
#include "imgproc/HGOCR.h"
|
#include "imgproc/HGOCR.h"
|
||||||
|
|
|
@ -71,7 +71,7 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -194,6 +194,11 @@ HGResult HGAPI HGImgFmt_LoadBmpImage(const HGChar* fileName, HGBmpLoadInfo* info
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (imgOrigin == 0)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
HGImageInfo bmpImageInfo;
|
HGImageInfo bmpImageInfo;
|
||||||
bmpImageInfo.width = bmp.width;
|
bmpImageInfo.width = bmp.width;
|
||||||
bmpImageInfo.height = bmp.height;
|
bmpImageInfo.height = bmp.height;
|
||||||
|
|
|
@ -648,7 +648,7 @@ HGResult HGAPI HGImgFmt_LoadImageFromGifReader(HGGifReader reader, HGUInt index,
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -664,6 +664,11 @@ HGResult HGAPI HGImgFmt_LoadImageFromGifReader(HGGifReader reader, HGUInt index,
|
||||||
imgType = HGBASE_IMGTYPE_RGB;
|
imgType = HGBASE_IMGTYPE_RGB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (imgOrigin == 0)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
if (index < gifReaderImpl->m_curIndex)
|
if (index < gifReaderImpl->m_curIndex)
|
||||||
{
|
{
|
||||||
gifReaderImpl->m_curIndex = 0xFFFFFFFF;
|
gifReaderImpl->m_curIndex = 0xFFFFFFFF;
|
||||||
|
|
|
@ -57,7 +57,7 @@ HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* in
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -112,6 +112,11 @@ HGResult HGAPI HGImgFmt_LoadJpegImage(const HGChar* fileName, HGJpegLoadInfo* in
|
||||||
imgType = HGBASE_IMGTYPE_GRAY;
|
imgType = HGBASE_IMGTYPE_GRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0 == imgOrigin)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
cinfo.out_color_space = JCS_RGB;
|
cinfo.out_color_space = JCS_RGB;
|
||||||
jpeg_start_decompress(&cinfo);
|
jpeg_start_decompress(&cinfo);
|
||||||
|
|
||||||
|
@ -183,7 +188,7 @@ HGResult HGAPI HGImgFmt_LoadJpegImageFromBuffer(HGBuffer buffer, HGJpegLoadInfo*
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -235,6 +240,11 @@ HGResult HGAPI HGImgFmt_LoadJpegImageFromBuffer(HGBuffer buffer, HGJpegLoadInfo*
|
||||||
imgType = HGBASE_IMGTYPE_GRAY;
|
imgType = HGBASE_IMGTYPE_GRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0 == imgOrigin)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
cinfo.out_color_space = JCS_RGB;
|
cinfo.out_color_space = JCS_RGB;
|
||||||
jpeg_start_decompress(&cinfo);
|
jpeg_start_decompress(&cinfo);
|
||||||
|
|
||||||
|
|
|
@ -293,7 +293,7 @@ HGResult HGOfdReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,7 +185,7 @@ HGResult HGPdfReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -210,6 +210,9 @@ HGResult HGPdfReaderImpl::LoadImage(HGUInt page, HGFloat xScale, HGFloat yScale,
|
||||||
if (0 == imgType)
|
if (0 == imgType)
|
||||||
imgType = HGBASE_IMGTYPE_RGB;
|
imgType = HGBASE_IMGTYPE_RGB;
|
||||||
|
|
||||||
|
if (imgOrigin == 0)
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
|
||||||
HGImage image2 = NULL;
|
HGImage image2 = NULL;
|
||||||
HGImageInfo imgInfo = { (uint32_t)width, (uint32_t)height, HGBASE_IMGTYPE_RGB, (uint32_t)pix->stride, HGBASE_IMGORIGIN_TOP };
|
HGImageInfo imgInfo = { (uint32_t)width, (uint32_t)height, HGBASE_IMGTYPE_RGB, (uint32_t)pix->stride, HGBASE_IMGORIGIN_TOP };
|
||||||
if (HGBASE_ERR_OK == HGBase_CreateImageWithData(pix->samples, &imgInfo, &image2))
|
if (HGBASE_ERR_OK == HGBase_CreateImageWithData(pix->samples, &imgInfo, &image2))
|
||||||
|
|
|
@ -42,7 +42,7 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -171,6 +171,11 @@ HGResult HGAPI HGImgFmt_LoadPngImage(const HGChar* fileName, HGPngLoadInfo* info
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (imgOrigin == 0)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
if (HGBASE_ERR_OK != HGBase_CreateImage(info_ptr->width, info_ptr->height, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2))
|
if (HGBASE_ERR_OK != HGBase_CreateImage(info_ptr->width, info_ptr->height, HGBASE_IMGTYPE_RGBA, HGBASE_IMGORIGIN_TOP, &image2))
|
||||||
{
|
{
|
||||||
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL);
|
longjmp(png_jmpbuf(png_ptr), (int)HGBASE_ERR_FAIL);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "HGPnm.h"
|
#include "HGPnm.h"
|
||||||
#include "../base/HGInc.h"
|
#include "../base/HGInc.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
HGResult HGAPI HGImgFmt_CheckPnmFile(const HGChar* fileName, HGBool* isPnm)
|
HGResult HGAPI HGImgFmt_CheckPnmFile(const HGChar* fileName, HGBool* isPnm)
|
||||||
{
|
{
|
||||||
|
@ -14,149 +15,146 @@ HGResult HGAPI HGImgFmt_CheckPnmFile(const HGChar* fileName, HGBool* isPnm)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HGResult bnm_load_P6(FILE &file, HGPnmLoadInfo* info, HGUInt imgType, HGUInt imgOrigin, HGImage* image)
|
static HGResult BnmLoadP6Info(FILE* file, HGUInt *width, HGUInt *height, HGUInt *maxColor)
|
||||||
{
|
{
|
||||||
HGChar c;
|
assert(NULL != file && NULL != width && NULL != height && NULL != maxColor);
|
||||||
HGInt rgbMaxColor, width, height;
|
|
||||||
|
|
||||||
c = getc(&file);
|
bool getWidth = false;
|
||||||
while (c == '#')
|
bool getHeight = false;
|
||||||
{
|
bool getMaxColor = false;
|
||||||
while (getc(&file) != '\n');
|
std::vector<char> buf;
|
||||||
c = getc(&file);
|
|
||||||
}
|
|
||||||
ungetc(c, &file);
|
|
||||||
|
|
||||||
while (c == '\n' || c == '\r' || c == '\t' || c == ' ')
|
while (1)
|
||||||
{
|
{
|
||||||
c = fgetc(&file);
|
HGByte c = 0;
|
||||||
while (c == '#')
|
if (1 != fread(&c, 1, 1, file))
|
||||||
{
|
{
|
||||||
while (getc(&file) != '\n');
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
c = getc(&file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
if (c == '#' || c == '\n' || c == '\r' || c == '\t' || c == ' ')
|
||||||
ungetc(c, &file);
|
|
||||||
|
|
||||||
fscanf(&file, "%d", &width);
|
|
||||||
|
|
||||||
c = getc(&file);
|
|
||||||
while (c == '\n' || c == '\r' || c == '\t' || c == ' ')
|
|
||||||
{
|
{
|
||||||
c = fgetc(&file);
|
if (!buf.empty())
|
||||||
while (c == '#')
|
|
||||||
{
|
{
|
||||||
while (getc(&file) != '\n');
|
buf.push_back(0);
|
||||||
c = getc(&file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ungetc(c, &file);
|
|
||||||
fscanf(&file, "%d", &height);
|
|
||||||
|
|
||||||
if (width <= 0 || height <= 0)
|
if (!getWidth)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDARG;
|
*width = atoi(&buf[0]);
|
||||||
|
if (*width == 0)
|
||||||
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
|
getWidth = true;
|
||||||
}
|
}
|
||||||
|
else if (!getHeight)
|
||||||
c = getc(&file);
|
|
||||||
while (c == '\n' || c == '\r' || c == '\t' || c == ' ')
|
|
||||||
{
|
{
|
||||||
c = fgetc(&file);
|
*height = atoi(&buf[0]);
|
||||||
while (c == '#')
|
if (*height == 0)
|
||||||
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
|
getHeight = true;
|
||||||
|
}
|
||||||
|
else if (!getMaxColor)
|
||||||
{
|
{
|
||||||
while (getc(&file) != '\n');
|
*maxColor = atoi(&buf[0]);
|
||||||
c = getc(&file);
|
if (*maxColor == 0)
|
||||||
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
|
getMaxColor = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buf.clear();
|
||||||
}
|
}
|
||||||
ungetc(c, &file);
|
|
||||||
|
|
||||||
fscanf(&file, "%d", &rgbMaxColor);
|
if (c == '#')
|
||||||
|
|
||||||
if (rgbMaxColor <= 0)
|
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDARG;
|
while (c != '\n')
|
||||||
}
|
|
||||||
|
|
||||||
c = fgetc(&file);
|
|
||||||
while (c == '\n' || c == '\r' || c == '\t' || c == ' ')
|
|
||||||
{
|
{
|
||||||
c = fgetc(&file);
|
if (1 != fread(&c, 1, 1, file))
|
||||||
while (c == '#')
|
|
||||||
{
|
{
|
||||||
while (getc(&file) != '\n');
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
c = getc(&file);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ungetc(c, &file);
|
}
|
||||||
|
}
|
||||||
_fseeki64(&file, 0, SEEK_CUR);
|
else if (c >= '0' && c <= '9')
|
||||||
uint64_t headerSize = _ftelli64(&file);
|
|
||||||
|
|
||||||
_fseeki64(&file, 0, SEEK_END);
|
|
||||||
uint64_t totalSize = _ftelli64(&file);
|
|
||||||
|
|
||||||
if (0 == headerSize || 0 == totalSize)
|
|
||||||
{
|
{
|
||||||
fclose(&file);
|
buf.push_back(c);
|
||||||
return HGBASE_ERR_FAIL;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
size_t dataSize = (size_t)totalSize - (size_t)headerSize;
|
|
||||||
uint8_t* buffer = (uint8_t*)malloc(dataSize);
|
|
||||||
if (NULL == buffer)
|
|
||||||
{
|
{
|
||||||
fclose(&file);
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
return HGBASE_ERR_FAIL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_fseeki64(&file, headerSize, SEEK_SET);
|
if (getMaxColor)
|
||||||
size_t readSize = fread(buffer, 1, dataSize, &file);
|
|
||||||
if (readSize != dataSize || dataSize != (size_t)width * (size_t)height * 3)
|
|
||||||
{
|
{
|
||||||
free(buffer);
|
break;
|
||||||
buffer = NULL;
|
}
|
||||||
fclose(&file);
|
|
||||||
return HGBASE_ERR_FAIL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HGImage image2 = NULL;
|
return HGBASE_ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
if (info != NULL)
|
static HGResult BnmLoadP6Image(FILE* file, HGPnmLoadInfo* info, HGUInt imgType, HGUInt imgOrigin, HGImage* image)
|
||||||
|
{
|
||||||
|
HGUInt width, height, maxColor;
|
||||||
|
HGResult ret = BnmLoadP6Info(file , &width, &height, &maxColor);
|
||||||
|
if (HGBASE_ERR_OK != ret || 255 != maxColor)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL != info)
|
||||||
{
|
{
|
||||||
info->width = width;
|
info->width = width;
|
||||||
info->height = height;
|
info->height = height;
|
||||||
info->type = HGIMGFMT_PNMTYPE_RGB_BINRAY;
|
info->type = HGIMGFMT_PNMTYPE_RGB_BINRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image != NULL)
|
if (NULL != image)
|
||||||
{
|
{
|
||||||
if (imgType == 0)
|
if (imgType == 0)
|
||||||
{
|
{
|
||||||
imgType = HGBASE_IMGTYPE_RGB;
|
imgType = HGBASE_IMGTYPE_RGB;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HGBase_CreateImage(width, height, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
|
if (imgOrigin == 0)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGImage image2 = NULL;
|
||||||
|
ret = HGBase_CreateImage(width, height, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image2);
|
||||||
|
if (HGBASE_ERR_OK != ret)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t* data;
|
uint8_t* data;
|
||||||
HGBase_GetImageData(image2, &data);
|
HGBase_GetImageData(image2, &data);
|
||||||
HGImageInfo imgInfo;
|
HGImageInfo imgInfo;
|
||||||
HGBase_GetImageInfo(image2, &imgInfo);
|
HGBase_GetImageInfo(image2, &imgInfo);
|
||||||
|
|
||||||
memcpy(data, buffer, dataSize);
|
HGByte* buf = new HGByte[width * 3];
|
||||||
|
for (HGUInt i = 0; i < height; ++i)
|
||||||
if(HGBASE_ERR_OK != HGBase_CloneImage(image2, imgType, imgOrigin, image))
|
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
if (width * 3 != fread(buf, 1, width * 3, file))
|
||||||
|
{
|
||||||
|
delete[] buf;
|
||||||
|
HGBase_DestroyImage(image2);
|
||||||
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(data + i * imgInfo.widthStep, buf, width * 3);
|
||||||
|
}
|
||||||
|
delete[] buf;
|
||||||
|
|
||||||
|
ret = HGBase_CloneImage(image2, imgType, imgOrigin, image);
|
||||||
|
HGBase_DestroyImage(image2);
|
||||||
|
|
||||||
|
if (HGBASE_ERR_OK != ret)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HGBase_DestroyImage(image2);
|
|
||||||
image2 = NULL;
|
|
||||||
free(buffer);
|
|
||||||
buffer = NULL;
|
|
||||||
fclose(&file);
|
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,7 +182,7 @@ HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadInfo* info
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -196,42 +194,20 @@ HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadInfo* info
|
||||||
return HGBASE_ERR_ACCESSDENIED;
|
return HGBASE_ERR_ACCESSDENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGChar header[1024] = {0};
|
HGByte magicKey[2] = {0};
|
||||||
HGChar c = NULL;
|
if (2 != fread(magicKey, 1, 2, file))
|
||||||
|
|
||||||
c = getc(file);
|
|
||||||
while (c == '#')
|
|
||||||
{
|
|
||||||
while (getc(file) != '\n');
|
|
||||||
c = getc(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (c == '\n' || c == '\r' || c == '\t' || c == ' ')
|
|
||||||
{
|
|
||||||
c = getc(file);
|
|
||||||
while (c == '#')
|
|
||||||
{
|
|
||||||
while (getc(file) != '\n');
|
|
||||||
c = getc(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (c != 'P')
|
|
||||||
{
|
|
||||||
return HGBASE_ERR_INVALIDDATA;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
c = getc(file);
|
|
||||||
if (c < '1' || c > '6')
|
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDDATA;
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == '6')
|
HGResult ret = HGBASE_ERR_INVALIDDATA;
|
||||||
|
if (magicKey[0] == 'P' && magicKey[1] == '6')
|
||||||
{
|
{
|
||||||
bnm_load_P6(*file, info, imgType, imgOrigin, image);
|
ret = BnmLoadP6Image(file, info, imgType, imgOrigin, image);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGImgFmt_SavePnmImage(HGImage image, const HGPnmSaveInfo* info, const HGChar* fileName)
|
HGResult HGAPI HGImgFmt_SavePnmImage(HGImage image, const HGPnmSaveInfo* info, const HGChar* fileName)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef __HGPnm_H__
|
#ifndef __HGPNM_H__
|
||||||
#define __HGPnm_H__
|
#define __HGPNM_H__
|
||||||
|
|
||||||
#include "../base/HGDef.h"
|
#include "../base/HGDef.h"
|
||||||
#include "../base/HGBaseErr.h"
|
#include "../base/HGBaseErr.h"
|
||||||
|
@ -38,4 +38,4 @@ HGEXPORT HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadI
|
||||||
|
|
||||||
HGEXPORT HGResult HGAPI HGImgFmt_SavePnmImage(HGImage image, const HGPnmSaveInfo* info, const HGChar* fileName);
|
HGEXPORT HGResult HGAPI HGImgFmt_SavePnmImage(HGImage image, const HGPnmSaveInfo* info, const HGChar* fileName);
|
||||||
|
|
||||||
#endif // __HGPnm_H__
|
#endif // __HGPNM_H__
|
||||||
|
|
|
@ -85,7 +85,7 @@ HGResult HGAPI HGImgFmt_LoadImageFromTiffReader(HGTiffReader reader, HGUInt inde
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -158,6 +158,11 @@ HGResult HGAPI HGImgFmt_LoadImageFromTiffReader(HGTiffReader reader, HGUInt inde
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (imgOrigin == 0)
|
||||||
|
{
|
||||||
|
imgOrigin = HGBASE_IMGORIGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
HGImageInfo tiffImageInfo;
|
HGImageInfo tiffImageInfo;
|
||||||
tiffImageInfo.width = width;
|
tiffImageInfo.width = width;
|
||||||
tiffImageInfo.height = height;
|
tiffImageInfo.height = height;
|
||||||
|
|
Loading…
Reference in New Issue