一、基于C#的Bitmap类
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace ConsoleBmpToJpeg
{
class Program
{
static void Main(string[] args)
{
string bmpFilePath = "testBmp.bmp";
Bitmap m_bitmap = new Bitmap(bmpFilePath);//读取指定目录下的位图文件并构造位图对象
string jpgFilePath = "jpegResult.jpg";
m_bitmap.Save(jpgFilePath, ImageFormat.Jpeg);//保存图片文件
//说明:
//1.保存图片格式还有很多其它选择,比如gif,png等等
//2.可以将转换的结果保存为文件流,也可以保存为内存流
}
}
}
说明:此方法只能基于WinXp下可以用,在WinCe下,构造位图那一语句是无法正常运行的,不知道为什么,可能是WinCe下没有提供这么高级的函数吧。最后还是用C++通过IImageFactory接口来进行的格式转换的。
二、基于C++语言ATL支持类CImage
用VS2005建立WinXp下的C++程序,并在建立程序的时候,选择ATL支持
然后主文件中代码如下:
// WinXpCppAtl.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "WinXpCppAtl.h" #include <atlimage.h> //Cyan:CImage类的头文件 #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一的应用程序对象 CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // 初始化 MFC 并在失败时显示错误 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: 更改错误代码以符合您的需要 _tprintf(_T("错误: MFC 初始化失败\n")); nRetCode = 1; } else { // TODO: 在此处为应用程序的行为编写代码。 CImage m_Image; m_Image.Load(_T("\\recvBmpData.bmp")); m_Image.Save(_T("\\recvBmpData.jpg")); } return nRetCode; }
注意:此方法可以进行文件操作也可以进行内存中转码操作,但是却也只能在WinXp下进行,在WinCe下无法成功。虽然WinCe下的ATL也有此CImage类,但是提供的方法比XP下有限,无法满足WinCe平台下的格式转换要求。