增加pnm格式p6保存功能

This commit is contained in:
luoliangyi 2022-10-28 11:17:16 +08:00
parent db02344670
commit 663e28a5d6
2 changed files with 66 additions and 5 deletions

View File

@ -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);

View File

@ -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);
}