VC实现:bmp转jpg、jpg转bmp、截屏保存jpg

原创 2011年01月09日 21:25:00

 

 

 

 

1.下载(GDI+ for VC6.0 SDK)GDIPlus文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中.
   下载地址:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip(引用他人的)

2.在你将要使用GDI+的工程中,完成初始化工作:
在StdAfx.h中加入

#define ULONG_PTR unsigned long
#include <Gdiplus.h>
using namespace Gdiplus;

 

3.在C×App头文件中加入
ULONG_PTR        m_gdiplusToken;

4.在 BOOL C×App::InitInstance() 中添加

GdiplusStartupInput     m_gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);

5.在int CXApp::ExitInstance()加入(这个方法需要自己加入 在ClassWizard 中,注意在ClassName中选择CXApp,Messages列表框中选择ExitInstance)

Gdiplus::GdiplusShutdown(m_gdiplusToken);

6.在Project->stting->Link->Object/libary中加入gdiplus.lib
此时GDI+设置成功。

需要GDI+,如果没有请看:vc6.0 下设置GDI+

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)   
{   
    UINT num = 0;                     // number of image encoders   
    UINT size = 0;                   // size of the image encoder array in bytes   
    ImageCodecInfo* pImageCodecInfo = NULL;   
    GetImageEncodersSize(&num, &size);   
    if(size == 0)   
        return -1;     //   Failure   
    
    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));   
    if(pImageCodecInfo == NULL)   
        return -1;     //   Failure   
    
    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;     //   Success   
        }           
    }   
    free(pImageCodecInfo);   
    return -1;     //   Failure   
}

 

/****************BMP转JPG*********用法示例**************************

Bitmap newbitmap(L"d://d.bmp");//加载BMP
const unsigned short *pFileName=L"d://new.jpg";//保存路径
SaveFile(&newbitmap,pFileName );

************************************************************/

void SaveFile(Bitmap* pImage, const wchar_t* pFileName)//
{
    EncoderParameters encoderParameters;
    CLSID jpgClsid; 
GetEncoderClsid(L"image/jpeg", &jpgClsid);
    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;
    Status status = pImage->Save(pFileName, &jpgClsid, &encoderParameters);
    if (status != Ok) 
    {
        wprintf(L"%d Attempt to save %s failed./n", status, pFileName);
    }
}


// 将当前屏幕保存成为jpg图片       
// 参数   xs = 图象x岽笮?   ys = 图象y轴大小,   quality = jpeg图象质量       
void SaveCurScreenJpg(LPCWSTR   pszFileName,   int   xs,   int   ys,   int   quality)   
{   
    HWND hwnd = ::GetDesktopWindow();   
    HDC hdc = GetWindowDC(NULL);   
    int x = GetDeviceCaps(hdc, HORZRES);   
    int y = GetDeviceCaps(hdc, VERTRES);   
    HBITMAP hbmp = ::CreateCompatibleBitmap(hdc, x, y), hold;   
    HDC hmemdc = ::CreateCompatibleDC(hdc);   
    hold = (HBITMAP)::SelectObject(hmemdc,   hbmp);   
    BitBlt(hmemdc, 0, 0, x, y, hdc, 0, 0, SRCCOPY);   
    SelectObject(hmemdc, hold);   
    
    Bitmap bit(xs, ys), bit2(hbmp, NULL);   
    Graphics g(&bit);   
    g.ScaleTransform((float)xs/x,   (float)ys/y);   
    g.DrawImage(&bit2,   0,   0);   
    
    CLSID                           encoderClsid;   
    EncoderParameters   encoderParameters;   
    
    encoderParameters.Count   =   1;   
    encoderParameters.Parameter[0].Guid   =   EncoderQuality;   
    encoderParameters.Parameter[0].Type   =   EncoderParameterValueTypeLong;   
    encoderParameters.Parameter[0].NumberOfValues   =   1;   
    encoderParameters.Parameter[0].Value   =   &quality;   
    
    GetEncoderClsid(L"image/jpeg",   &encoderClsid);   
    bit.Save(pszFileName,   &encoderClsid,   &encoderParameters);   
   
    ::DeleteObject(hbmp);   
    ::DeleteObject(hmemdc);   
    return;   
}  


HBITMAP   ReturnHBITMAP(CString   FileName)//FileName可能是bmp、dib、png、gif、jpeg/jpg、tiff、emf等文件的文件名 

          Bitmap   tempBmp(FileName.AllocSysString())   ; 
        Color       backColor;       
        HBITMAP       HBitmap;   
        tempBmp.GetHBITMAP(backColor,&HBitmap); 
        return   HBitmap;

}

VC 实现BMP转换到JPG、JPG转换到BMP

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; ...

BMP转JPG(法一)使用jpeglib库实现bmp转jpg

一、vc编译jpeglib库 1、下载源代码 下载地址:http://www.ijg.org/。注意:一定要下载win32 版本 2、编译源代码.     A、解压源代码,修改源代码中jcon...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

BMP与JPG图片格式的互相转换

近天要用到bmp与jpg之间互想转换,在网上查看了许多资料,如jpeglib,cximage,zlib,最后找到了GDI+利用流来转换,此方法最简单,可以实现在文件->文件,文件->内存,内存->内存...

GDI入门实例(在VC++6.0中将JPG格式图片转换成BMP格式)

在 VC++6.0 中将 JPG 格式图片转换成 BMP 格式 思路:利用 GDI+来完成 难点: (1)配置 GDI 开发环境,添加配置代码 (2)在当文档程序中添加转换代码 注意:本文...

MFC jpg与bmp格式图片互转

jpg与bmp图片格式互相转换的库里面有这么几个文件: 把下面的这几个文件放到你的工程目录下面,并添加! 工程 -- 设置 -- 连接: 在对象/库模块里面添加:jpeglib2.lib winm...
  • ieczw
  • ieczw
  • 2014年02月27日 21:34
  • 1748

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

VC6怎样将bmp格式图象转换为jpg格式文件?

VC6怎样将bmp格式图象转换为jpg格式文件?   利用 IJG 的 jpeg 库。   关于如何使用 IJG jpeg 库,请参考前面的文章: VC6下编译IJG库(用于读取和生成jpg...

Android用C++创建surface显示RGB数据

转自:http://blog.csdn.net/tung214/article/details/36628897 以下在Android 4.4平台开发测试,用于在屏幕直接显示RGB数据,当然,如...

android通过拍照、相册获取图片并显示

摘自:http://www.haolizi.net/example/view_2963.html 【核心代码】 1 2 3 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC实现:bmp转jpg、jpg转bmp、截屏保存jpg
举报原因:
原因补充:

(最多只允许输入30个字)