控制台程序使用GDI+

由于需要得到图片的宽、高以及所占的字节数大小,所以上网百度了一下,发现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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值