#include "stdafx.h"
#include "IDCTT.h"
#include "IDC_Event.h"
#include "IDC_COM.h"
#include <stdlib.h>
#include <string.h>
#include "ximage.h"
#pragma comment (lib, "Version.lib")
#pragma comment( lib, "gdiplus.lib" )
#pragma comment(lib,"cximage.lib")
#pragma comment(lib,"jasper.lib")
#pragma comment(lib,"jbig.lib")
#pragma comment(lib,"jpeg.lib")
#pragma comment(lib,"libdcr.lib")
#pragma comment(lib,"libpsd.lib")
#pragma comment(lib,"mng.lib")
#pragma comment(lib,"png.lib")
#pragma comment(lib,"tiff.lib")
#pragma comment(lib,"zlib.lib")
#include "gdiplus.h"
using namespace Gdiplus;
static ULONG_PTR m_gdiplusToken;//关键因素
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1;
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}
WCHAR * charToWchar(char *s){
int w_nlen=MultiByteToWideChar(CP_ACP,0,s,-1,NULL,0);
WCHAR *ret;
ret=(WCHAR*) malloc(sizeof(WCHAR)*w_nlen);
memset(ret,0,sizeof(ret));
MultiByteToWideChar(CP_ACP,0,s,-1,ret,w_nlen);
return ret;
}
// dd bmp 转换为jpg ok 错误。
BOOL CombineJpgPic2( const WCHAR *strPic1,const WCHAR *strPic2 )
{
CLSID pngClsid;
GetEncoderClsid( L"image/jpeg", &pngClsid);
Gdiplus::Bitmap* image = Bitmap::FromFile(strPic1,true);
;
Gdiplus::Bitmap* CpImage = new Gdiplus::Bitmap(image->GetWidth(),image->GetHeight());
Gdiplus::Graphics* imageGraphics = Gdiplus::Graphics::FromImage(CpImage); //通过Image对象创建一个绘图句柄,使用这个句柄对图片进行操作
RectF rectf(0,0,image->GetWidth(),image->GetHeight());
imageGraphics->DrawImage(image,rectf,0,0,image->GetWidth(),image->GetHeight(),Unit::UnitPixel,0,0,0);
imageGraphics->SetTextRenderingHint(TextRenderingHintAntiAlias);
EncoderParameters encoderParameters;
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
// Save the image as a JPEG with quality level 100.
ULONG quality;
quality = 100;
encoderParameters.Parameter[0].Value = &quality;
CpImage->Save(strPic2, &pngClsid, &encoderParameters);
delete image;
image = NULL;
delete CpImage;
CpImage = NULL;
write_trace(EC_DEBUG,"图片格式转换结束 -->jpg %s",strPic2);
return 1;
}
//ljy dd bmp 转换为jpg
BOOL CombineJpgPic( const TCHAR *strPic1,const TCHAR *strPic2 )
{
trace_i("转换图片11");
CxImage lImage;
lImage.Load( strPic1);//ljy 1214 97版本 jpg 改为bmp//lImage.Load("D:\\Image\\Head.jpg");
// ljy test 1214 头像不压缩。
//lImage.SetXDPI(96);
//lImage.SetYDPI(96);//ljy add 1214
//lImage.Resample(150,185,1,NULL);//ljy add 1214 test
lImage.SetJpegQuality(100);//ljy 1214 不压缩
lImage.Save(strPic2,CXIMAGE_FORMAT_JPG);
trace_i("jpg转换结束 -->jpg %s",strPic2);
return 1;
}
//extern HANDLE ComHandle;
IDCTT::IDCTT(void)
{
}
IDCTT::IDCTT(HINSTANCE hInstance,LPSTR lpszCmdLine):CSPBase(hInstance,lpszCmdLine)
{
ComHandle = 0;
firstFlag = 1;
lpresult = 0;
StatusResult = 0;
ResetFlag = 0;
Gdiplus::GdiplusStartupInput gdiplusStartupInput;//关键因素
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); //关键因素
trace_h("图片转换。。。。");
CombineJpgPic2(charToWchar("d:\\service\\temp\\aa.bmp"),charToWchar("d:\\service\\temp\\TYYY2443233.jpg"));//ok
}