由于需要得到图片的宽、高以及所占的字节数大小,所以上网百度了一下,发现GDI+可以很简单的满足我的功能。以下结合自己的程序,介绍下GDI+的使用方法。
1、包含GDI+的头文件、库文件以及命名空间
1
包含GDI+的头文件、库文件以及命名空间
#define ULONG_PTR unsigned long
#include <Gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
2、GDI+程序的初始化
1
GDI+程序的初始化:
GdiplusStartupInput gdiplusStartupinput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken,&gdiplusStartupinput,NULL);
........................................................................
.......................自己程序的代码....................
3、GDI+结束使用时要对其进行关闭
3
GDI+结束使用时要对其进行关闭:
GdiplusShutdown(gdiplusToken);
自己程序代码简单实例:
4
自己简单代码实例:
BOOL ZZC_Func(char *strFileNameS,char*strFileNameD)
{
FILE *fp=NULL;
int nWidth,nHeight;
TCHAR *WidestrFileNameS=new TCHAR[256];
MultiByteToWideChar(CP_ACP,NULL,strFileNameS,-1,WidestrFileNameS,256);
Image * pImage = Image::FromFile(WidestrFileNameS);
if(pImage)
{
nWidth = pImage->GetWidth();
nHeight = pImage->GetHeight();
}
int nSize=0;
BYTE *Buffer;
fopen_s(&fp,strFileNameS,"rb");
if (fp)
{
nSize=filelength(fileno(fp));
Buffer=new BYTE[nSize*24];
fread(Buffer,nSize,1,fp);
fclose(fp);
fp=NULL;
}
EncodeJPG(strFileNameS,strFileNameD,Buffer,nSize,0,3,nWidth,nHeight);
if (Buffer!=NULL)
{
delete []Buffer;
}
if (WidestrFileNameS!=NULL)
{
delete []WidestrFileNameS;
}
return TRUE;
}
1
BOOL EncodeJPG(char * strFileNameS,char *strFileNameD,unsigned char * pData,int nSize,int nByteAdjust,int nComponents,int nImageWidth,int nImageHeight)
{
try{
char *outdata = new char[10000000];
BYTE *pPallete=NULL;
int nSizeJpg = 0;
struct jpeg_compress_struct jcs;
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(&jem);
jpeg_create_compress(&jcs);
jpeg_stdio_dest(&jcs, outdata,&nSizeJpg);
jcs.image_width = nImageWidth;
jcs.image_height = nImageHeight;
jcs.input_components = nComponents;
if (nComponents==1)
{
jcs.in_color_space = JCS_GRAYSCALE;
}
else{
jcs.in_color_space = JCS_RGB;
}
jpeg_set_defaults(&jcs);
jpeg_set_quality (&jcs, 80, true);
jpeg_start_compress(&jcs, TRUE);
JSAMPROW row_pointer[1];
int row_stride;
row_stride = jcs.image_width*nComponents;
while (jcs.next_scanline < jcs.image_height) {
row_pointer[0] =(BYTE *) & pData[jcs.next_scanline * (row_stride/*+nByteAdjust*/)];
jpeg_write_scanlines(&jcs, row_pointer, 1);
}
jpeg_finish_compress(&jcs);
jpeg_destroy_compress(&jcs);
FILE *f=NULL;
fopen_s(&f,strFileNameD,"wb");
if (f){
fwrite(outdata,nSizeJpg,1,f);
fclose(f);
}
delete [] outdata;
return TRUE;
}catch(...){
return FALSE;
}
}