#include <Stdio.h> #include <Objbase.h> #include <Windows.h> #include <Gdiplus.h> #include <GdiPlusEnums.h> using namespace Gdiplus; #pragma comment(lib,"gdiplus") // Helper functions int GetCodecClsid(const WCHAR*, CLSID*);int main() { CLSID codecClsid; EncoderParameters encoderParameters; long quality; Status stat; GdiplusStartupInput gdiplusStartupInput; ULONG gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); { // Get an image from the disk. Image image(L"F:\\ddd.bmp");
// Get the CLSID of the JPEG codec. GetCodecClsid(L"image/jpeg", &codecClsid);
// Before we call Image::Save, we must initialize an // EncoderParameters object. The EncoderParameters object // has an array of EncoderParameter objects. In this // case, there is only one EncoderParameter object in the array. // The one EncoderParameter object has an array of values. // In this case, there is only one value (of type LONG) // in the array. We will set this value to 0, 50, and 100.
// Save the image as a JPEG with quality level 0. quality = 0; encoderParameters.Parameter[0].Value = &quality; stat = image.Save(L"Shapes001.jpg", &codecClsid, &encoderParameters);
if(stat == Ok) wprintf(L"%s saved successfully.\n", L"Shapes001.jpg"); else wprintf(L"%d Attempt to save %s failed.\n", stat, L"Shapes001.jpg");
// Save the image as a JPEG with quality level 50. quality = 50; encoderParameters.Parameter[0].Value = &quality; stat = image.Save(L"Shapes050.jpg", &codecClsid, &encoderParameters);
if(stat == Ok) wprintf(L"%s saved successfully.\n", L"Shapes050.jpg"); else wprintf(L"%d Attempt to save %s failed.\n", stat, L"Shapes050.jpg");
// Save the image as a JPEG with quality level 100. quality = 100; encoderParameters.Parameter[0].Value = &quality; stat = image.Save(L"Shapes100.jpg", &codecClsid, &encoderParameters);
if(stat == Ok) wprintf(L"%s saved successfully.\n", L"Shapes100.jpg"); else wprintf(L"%d Attempt to save %s failed.\n", stat, L"Shapes100.jpg"); } GdiplusShutdown(gdiplusToken); return 0; } // main int GetCodecClsid(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(int j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; return j; // Success } } // for return -1; // Failure} // GetCodecClsid //download gdiplus.dll //http://www.microsoft.com/downloads/release.asp?releaseid=32738 //Platform SDK Redistributable: GDI+ RTM
http://www.copathway.com/vchelp/view_article.asp?ft=2&article_id=269
jpeglib.zip可以显示JPEG文件,进行JPEG和BMP之间的相互转换,并可以保存为灰度JPG图像
#include <Objbase.h>
#include <Windows.h>
#include <Gdiplus.h>
#include <GdiPlusEnums.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus")
// Helper functions
int GetCodecClsid(const WCHAR*, CLSID*);int main()
{
CLSID codecClsid;
EncoderParameters encoderParameters;
long quality;
Status stat;
GdiplusStartupInput gdiplusStartupInput;
ULONG gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
{
// Get an image from the disk.
Image image(L"F:\\ddd.bmp");
// Get the CLSID of the JPEG codec.
GetCodecClsid(L"image/jpeg", &codecClsid);
// Before we call Image::Save, we must initialize an
// EncoderParameters object. The EncoderParameters object
// has an array of EncoderParameter objects. In this
// case, there is only one EncoderParameter object in the array.
// The one EncoderParameter object has an array of values.
// In this case, there is only one value (of type LONG)
// in the array. We will set this value to 0, 50, and 100.
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 0.
quality = 0;
encoderParameters.Parameter[0].Value = &quality;
stat = image.Save(L"Shapes001.jpg", &codecClsid, &encoderParameters);
if(stat == Ok)
wprintf(L"%s saved successfully.\n", L"Shapes001.jpg");
else
wprintf(L"%d Attempt to save %s failed.\n", stat, L"Shapes001.jpg");
// Save the image as a JPEG with quality level 50.
quality = 50;
encoderParameters.Parameter[0].Value = &quality;
stat = image.Save(L"Shapes050.jpg", &codecClsid, &encoderParameters);
if(stat == Ok)
wprintf(L"%s saved successfully.\n", L"Shapes050.jpg");
else
wprintf(L"%d Attempt to save %s failed.\n", stat, L"Shapes050.jpg");
// Save the image as a JPEG with quality level 100.
quality = 100;
encoderParameters.Parameter[0].Value = &quality;
stat = image.Save(L"Shapes100.jpg", &codecClsid, &encoderParameters);
if(stat == Ok)
wprintf(L"%s saved successfully.\n", L"Shapes100.jpg");
else
wprintf(L"%d Attempt to save %s failed.\n", stat, L"Shapes100.jpg");
}
GdiplusShutdown(gdiplusToken);
return 0;
} // main
int GetCodecClsid(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(int j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
return j; // Success
}
} // for return -1; // Failure} // GetCodecClsid
//download gdiplus.dll
//http://www.microsoft.com/downloads/release.asp?releaseid=32738
//Platform SDK Redistributable: GDI+ RTM