两种方式bmp转换jpg

#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 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC++ JPEG与BMP图像互转。 JPG图形库只有14个函数,他们都是非常有用的: 1. void init_jpeg() <---jpgdll中的函数 1. void init_jpeg1() <--jpegdll中的函数 本函数初始化JPEG API动态链接库,它必须在其它JPEG API函数之前调用。在程序中此函数只须调用一次。 函数调用语句样例: init_jpeg(); . 2. void findwindow(char *title) 1. void findwindow1(char *title) 本函数取程序窗口的图形句柄,用于其它函数绘图处理。 Title为程序窗口的标题,若标题很长,取前几个字就可以了。 函数调用语句样例: hl=findwindow("JPEG TEST"); . 3. long showjpg(char *fliename, long hwnd, long left, long top) 2. long showjpg1(char *fliename, long hwnd, long left, long top) 本函数打开一个JPG图形文件,并在窗口的(left,top)位置显示。 hwnd为窗口图形句柄,(left,top)为图形显示的左上角位置。 函数调用语句样例: rs=showjpg("c:\jpgdemo\demo.jpg",hwnd,10,10) .. 4. long show_bmp(char *fliename, long hwnd, long left, long top) 3. long show_bmp1(char *fliename, long hwnd, long left, long top) 本函数打开一个BMP图形文件,并在窗口的(left,top)位置显示。 hwnd为窗口图形句柄,(left,top)为图形显示的左上角位置。 函数调用语句样例: rs=showbmp("c:\jpgdemo\demo.bmp",hwnd,10,10) . 5. long jpg_to_bmp(char *jpgfilename, char *bmpfilename) 5. long jpg_to_bmp1(char *jpgfilename, char *bmpfilename) 本函数将一个JPG图形文件转换BMP图形文件。 函数调用语句样例: rs=jpg_to_bmp("c:\jpgdemo\demo.jpg","c:\temp\demo.bmp") . 6. long bmp_to_jpg(char *jpgfilename, char *bmpfilename,long quality) 5. long bmp_to_jpg1(char *jpgfilename, char *bmpfilename,long quality) 本函数将一个BMP图形文件转换JPG图形文件。 Quality为转换的质量和图形压缩情况,取值0-100。一般取75。 函数调用语句样例: rs=bmp_to_jpg("c:\jpgdemo\demo.bmp","c:\temp\demo.jpg",75) . 7. long copy_to_bmp(long hwnd, char *bmpfilename, long type) 6. long copy_to_bmp1(long hwnd, char *bmpfilename, long type) 本函数将程序窗口内容硬拷贝到一个BMP图形文件。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 函数调用语句样例: rs=copy_to_bmp("c:\temp\demo.bmp",hwnd,0) . 8. long copy_to_jpeg(long hwnd, char *bmpfilename, long type,long quality) 7. long copy_to_jpeg1(long hwnd, char *bmpfilename, long type,long quality) 本函数将程序窗口内容硬拷贝到一个JPG图形文件。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 quality为图形质量,取值0-100。一般取75。 函数调用语句样例: rs=copy_to_jpeg("c:\temp\demo.jpeg",hwnd,0,75) . 9. long to_clip(long hwnd, long type) 8. long to_clip1(long hwnd, long type) 本函数将程序窗口内容硬拷贝到剪贴板,你可以用"Paste"方式在其它图形软件中编辑。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 函数调用语句样例: rs=to_clip(hwnd,0) . 10. long clip_to_jpeg(char *name,long hl,long quality) 10 long clip_to_jpeg1(char *name,long hl,long quality) 本函数将当前剪贴板上的图形硬拷贝到一个JPG图形文件。 hwnd为窗口图形句柄, Type=0, 拷贝整个窗口。 Type=1, 拷贝用户区域 quality为图形质量,取值0-100。一般取75。 函数调用语句样例: rs=clip_to_jpeg("bird2.jpg",hWnd,75); . 11. long clip_to_bmp(char *name,long hl) 11. long clip_to_bmp1(char *name,long hl) 本函数将当前剪贴板上的图形硬拷贝到一个JPG图形文件。 hwnd为窗口图形句柄, 函数调用语句样例: rs=clip_to_bmp("bird2.bmp",hWnd,75); . 12. void Area_Copy(long hl,long left,long top,long w,long h) 12. void Area_Copy1(long hl,long left,long top,long w,long h) 本函数将程序窗口上的一个区域的内容硬拷贝到剪贴板,你可以用"Paste"方式在其它图形软件中编辑。 hwnd为窗口图形句柄, (left,top)为图形拷贝区域左上角位置 w为图形拷贝区域的宽度 h为图形拷贝区域的高宽度 函数调用语句样例:Area_Copy(hWnd,0,0,300,400); . 13. long Area_to_jpeg(long hl,long left,long top,long w,long h,char * name,long qa) 13.long Area_to_jpeg1(long hl,long left,long top,long w,long h,char * name,long qa) 本函数将程序窗口上的一个区域的内容硬拷贝到JPG图形文件。 hwnd为窗口图形句柄, (left,top)为图形拷贝区域左上角位置 w为图形拷贝区域的宽度 h为图形拷贝区域的高宽度 quality为图形质量,取值0-100。一般取75。 函数调用语句样例:Area_to_jpeg(hWnd,0,0,300,400,"bird3.jpg",75); . 14. long Area_to_bmp(long hl,long left,long top,long w,long h,char * name) 14. long Area_to_bmp1(long hl,long left,long top,long w,long h,char * name) 本函数将程序窗口上的一个区域的内容硬拷贝到BMP图形文件。 hwnd为窗口图形句柄, (left,top)为图形拷贝区域左上角位置 w为图形拷贝区域的宽度 h为图形拷贝区域的高宽度 函数调用语句样例:Area_to_bmp(hWnd,0,0,300,400,"bird3.bmp");

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值