FreeImage例子
【摘要】 http://www.pudn.com/downloads525/sourcecode/windows/detail2176862.html
#include "OpenJPEG.h"
#include "unistd.h"
OpenJPEG::OpenJPEG(void)
{
}
OpenJPEG::~OpenJPEG(void)
{
}
FIBITMAP* Open...
http://www.pudn.com/downloads525/sourcecode/windows/detail2176862.html
#include "OpenJPEG.h"
#include "unistd.h"
OpenJPEG::OpenJPEG(void)
{
}
OpenJPEG::~OpenJPEG(void)
{
}
FIBITMAP* OpenJPEG::Openjpg()
{
char *strPath="lena.jpg";
m_pFibitmap = LoadDIB(strPath, 0);
return m_pFibitmap;
}
//通用图像加载函数,支持的图像有bmp,jpg,tif,png,gif,psd,pgm等等
FIBITMAP* OpenJPEG::LoadDIB(char* lpszPathName, int flag)
{
m_lpszPathName = lpszPathName;
m_fif = FreeImage_GetFileType(lpszPathName); //获取Image类型
//如果没有文件签名,试着从文件扩展名判断文件类型
if(m_fif == FIF_UNKNOWN)
m_fif = FreeImage_GetFIFFromFilename(lpszPathName);
//检查插件是否具有读取该格式的能力
if((m_fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(m_fif))
{
FIBITMAP *dib = FreeImage_Load(m_fif, lpszPathName, flag);
return dib;
// FITAG *tagMake = NULL;
// FreeImage_GetMetadata(FIMD_EXIF_EXIF,dib,"Make",&tagMake);
// if (tagMake!=NULL)
// {
// //SetDlgItemText(IDC_EDIT1,tagMake);
// }
}
return NULL;
}
bool OpenJPEG::Savejpg(FIBITMAP *dib,char* lpszPath, int flag)
{
FREE_IMAGE_FORMAT fif =FIF_UNKNOWN;
//
BOOL bSuccess = FALSE;
//
fif=FreeImage_GetFIFFromFilename(lpszPath);
//判断能否进行保存
if(fif != FIF_UNKNOWN )
{
BOOL bCanSave;
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib);
if(image_type == FIT_BITMAP)
{
WORD bpp = FreeImage_GetBPP(dib);
bCanSave=(FreeImage_FIFSupportsWriting(fif) && FreeImage_FIFSupportsExportBPP(fif, bpp));
}
else
{
bCanSave=FreeImage_FIFSupportsExportType(fif, image_type);
}
if (bCanSave)
{
bSuccess = true;
}
FIBITMAP* bitmap = FreeImage_ConvertFromRawBits(dib->data,width,height,pitch,24,FI_RGBA_BLUE_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_RED_MASK,FALSE);
FreeImage_Save(fif,bitmap,lpszPath,flag);
}
return true;
}
int OpenJPEG::RescalePic(const char *srcPicPath,int rscWidth,int rscHeight,const char *rscPicPath)
{
if(access(srcPicPath,0) != 0)
return 499; //no such file ,or access deny
if(rscWidth<=0 || rscHeight<=0)
return 423; //you input a wrong size, the rscWidth/rscHeight must be bigger than zero
FIBITMAP *sourcePic = NULL,*rescalePic = NULL,*finalPic = NULL;
FreeImage_Initialise();
FREE_IMAGE_FORMAT picType = FIF_UNKNOWN;
picType = FreeImage_GetFileType (srcPicPath,0);
if(picType == FIF_UNKNOWN)
{
// picType = FreeImage_GetFIFFromFilename(srcPicPath);
// if(picType == FIF_UNKNOWN)
// {
FreeImage_DeInitialise();
return 421; //can not get picture type
// }
}
bool typeSupport = FreeImage_FIFSupportsReading(picType);
if(typeSupport == FALSE)
{
FreeImage_DeInitialise();
return 422; //not support image type
}
sourcePic = FreeImage_Load(picType,srcPicPath,NULL);
if(!sourcePic)
{
FreeImage_DeInitialise();
return 499;
}
double originalWidth,originalHeight;
unsigned int finalWidth,finalHeight;
originalWidth = FreeImage_GetWidth(sourcePic);
originalHeight = FreeImage_GetHeight(sourcePic);
if(originalWidth*originalHeight == 0)
{
FreeImage_Unload(sourcePic);
sourcePic = NULL;
FreeImage_DeInitialise();
return 425;
}
// finalWidth = rscWidth;
// finalHeight = rscHeight;
if(originalWidth<=rscWidth && originalHeight<=rscHeight)
{
finalWidth = originalWidth;
finalHeight = originalHeight;
}
else
{
if (rscWidth * (originalHeight / originalWidth) > rscHeight)
{
finalWidth = rscHeight * (originalWidth / originalHeight);
finalHeight = rscHeight;
}
else
{
finalWidth = rscWidth;
finalHeight = rscWidth * (originalHeight / originalWidth);
}
}
// rsc = FreeImage_ConvertToType(src,FIT_BITMAP,true);
rescalePic = FreeImage_Rescale(sourcePic,finalWidth,finalHeight,FILTER_BOX);//rescale size: 165x130
if(!rescalePic)
{
FreeImage_Unload(sourcePic);
sourcePic = NULL;
FreeImage_DeInitialise();
return 499;//
}
finalPic = FreeImage_ConvertTo24Bits(rescalePic); //this is important,if no this,the rescaled gif cannot flash
if(!finalPic)
{
FreeImage_Unload(sourcePic);
FreeImage_Unload(rescalePic);
sourcePic = NULL;
rescalePic = NULL;
FreeImage_DeInitialise();
return 499;//
}
int returnValue = 0;
if(!FreeImage_Save(FIF_JPEG,finalPic,rscPicPath,JPEG_DEFAULT)) //save rescaled picture
returnValue = 499;
FreeImage_Unload(sourcePic);
FreeImage_Unload(rescalePic);
FreeImage_Unload(finalPic);
sourcePic = NULL;
rescalePic = NULL;
finalPic = NULL;
FreeImage_DeInitialise();
return returnValue;
}
IplImage* OpenJPEG::loadipl(const char* filename)
{
FreeImage_Initialise();
FIBITMAP* dib = GenericLoader(filename);
if(!dib)
return NULL;
int nClrUsed = FreeImage_GetColorsUsed(dib);
int nBpp = FreeImage_GetBPP(dib);
int height = FreeImage_GetHeight(dib);
int width = FreeImage_GetWidth(dib);
RGBQUAD* pPalette = FreeImage_GetPalette(dib);
int nChannel=3;
if(!nClrUsed && !pPalette) //无调色板图像处理
{
IplImage* iplImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,nChannel);
iplImg->origin = 1;
for(int y=0;y<height;y++)
{
BYTE* pLine = (BYTE*)iplImg->imageData + y*iplImg->widthStep;
BYTE* psrcLine = (BYTE*)FreeImage_GetScanLine(dib,y);
for (int x=0;x<nChannel*width;x++)
{
*pLine++ = *psrcLine++;
}
}
FreeImage_Unload(dib);
FreeImage_DeInitialise();
return iplImg;
}
else if(pPalette)//索引图像处理
{
IplImage* iplImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,nChannel);
iplImg->origin = 1;
BYTE intensity;
BYTE* pIntensity = &intensity;
for(int y=0;y<height;y++)
{
BYTE* pLine = (BYTE*)iplImg->imageData + y*iplImg->widthStep;
for (int x=0;x<width;x++)
{
FreeImage_GetPixelIndex(dib,x,y,pIntensity);
pLine[x*3] = pPalette[intensity].rgbBlue;
pLine[x*3+1] = pPalette[intensity].rgbGreen;
pLine[x*3+2] = pPalette[intensity].rgbRed;
}
}
FreeImage_Unload(dib);
FreeImage_DeInitialise();
return iplImg;
}
else
{
FreeImage_Unload(dib);
FreeImage_DeInitialise();
return NULL;
}
}
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/60144757
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)