增加pnm格式p6保存功能
This commit is contained in:
parent
db02344670
commit
663e28a5d6
|
@ -104,10 +104,6 @@ BOOL CHGTestDlg::OnInitDialog()
|
||||||
SetIcon(m_hIcon, TRUE); // 设置大图标
|
SetIcon(m_hIcon, TRUE); // 设置大图标
|
||||||
SetIcon(m_hIcon, FALSE); // 设置小图标
|
SetIcon(m_hIcon, FALSE); // 设置小图标
|
||||||
|
|
||||||
HGImage image = NULL;
|
|
||||||
HGImgFmt_LoadPnmImage("D:\\rgb.ppm", NULL, 0, 0, &image);
|
|
||||||
HGImgFmt_SaveImage(image, 0, NULL, "D:\\kkk.jpg");
|
|
||||||
|
|
||||||
HGTwain_LoadDSM(&m_dsm);
|
HGTwain_LoadDSM(&m_dsm);
|
||||||
HGTwain_OpenDSM(m_dsm, m_hWnd, DSEventCallback, this);
|
HGTwain_OpenDSM(m_dsm, m_hWnd, DSEventCallback, this);
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,72 @@ HGResult HGAPI HGImgFmt_LoadPnmImage(const HGChar* fileName, HGPnmLoadInfo* info
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGImgFmt_SavePnmImage(HGImage image, const HGPnmSaveInfo* info, const HGChar* fileName)
|
static HGResult BnmSaveP6Image(HGImage image, const HGChar* fileName)
|
||||||
{
|
{
|
||||||
|
HGImageInfo imgInfo;
|
||||||
|
HGBase_GetImageInfo(image, &imgInfo);
|
||||||
|
assert(imgInfo.type == HGBASE_IMGTYPE_RGB);
|
||||||
|
|
||||||
|
FILE* file = fopen(fileName, "wb");
|
||||||
|
if (NULL == file)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_ACCESSDENIED;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGByte* data = NULL;
|
||||||
|
HGBase_GetImageData(image, &data);
|
||||||
|
|
||||||
|
char magicKey[] = "P6\n";
|
||||||
|
fwrite(magicKey, 1, strlen(magicKey), file);
|
||||||
|
|
||||||
|
char width[20], height[20];
|
||||||
|
sprintf(width, "%u\n", imgInfo.width);
|
||||||
|
sprintf(height, "%u\n", imgInfo.height);
|
||||||
|
fwrite(width, 1, strlen(width), file);
|
||||||
|
fwrite(height, 1, strlen(height), file);
|
||||||
|
|
||||||
|
char maxColor[] = "255\n";
|
||||||
|
fwrite(maxColor, 1, strlen(maxColor), file);
|
||||||
|
|
||||||
|
HGByte* p = data;
|
||||||
|
HGInt step = (HGInt)imgInfo.widthStep;
|
||||||
|
if (HGBASE_IMGORIGIN_BOTTOM == imgInfo.origin)
|
||||||
|
{
|
||||||
|
p = data + (imgInfo.height - 1) * imgInfo.widthStep;
|
||||||
|
step = -(HGInt)imgInfo.widthStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (HGUInt i = 0; i < imgInfo.height; ++i)
|
||||||
|
{
|
||||||
|
uint8_t* pEx = p + (HGSize)i * (HGSize)step;
|
||||||
|
fwrite(pEx, 1, imgInfo.width * 3, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult HGAPI HGImgFmt_SavePnmImage(HGImage image, const HGPnmSaveInfo* info, const HGChar* fileName)
|
||||||
|
{
|
||||||
|
if (NULL == image || NULL == fileName)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL != info)
|
||||||
|
{
|
||||||
|
if (info->type != HGIMGFMT_PNMTYPE_RGB_BINRAY)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HGImageInfo imgInfo;
|
||||||
|
HGBase_GetImageInfo(image, &imgInfo);
|
||||||
|
if (imgInfo.type != HGBASE_IMGTYPE_RGB)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
return BnmSaveP6Image(image, fileName);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue