2016-09-27 6 views
0

У меня есть изображение в форме BMP, и я хочу, чтобы программа C++ сохранила ее в JPG с помощью GDI +, после чтения документации GDI + я придумал эту программу:Сохранение JPG из BMP с использованием GDI + с набором DPI

#include <windows.h> 
#include <objidl.h> 
#include <gdiplus.h> 
#include "GdiplusHelperFunctions.h" 


#pragma comment (lib,"Gdiplus.lib") 

VOID SaveFile() 
{ 
    // Initialize GDI+. 
    Gdiplus::GdiplusStartupInput gdiplusStartupInput; 
    ULONG_PTR gdiplusToken; 
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); 

    CLSID encoderClsid; 
    Status stat; 
    EncoderParameters encoderParameters; 
    ULONG quality; 
    Image* image = new Gdiplus::Image(L"plot.bmp"); 

    // Get the CLSID of the PNG encoder. 
    GetEncoderClsid(L"image/jpeg", &encoderClsid); 

    encoderParameters.Count = 1; 
    encoderParameters.Parameter[0].Guid = EncoderQuality; 
    encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; 
    encoderParameters.Parameter[0].NumberOfValues = 1; 

    quality = 100; 
    encoderParameters.Parameter[0].Value = &quality; 

    stat = image->Save(L"plot100.jpg", &encoderClsid, &encoderParameters); 

    if (stat == Ok) 
     printf("plot.jpg was saved successfully\n"); 
    else 
     printf("Failure: stat = %d\n", stat); 

    delete image; 
    GdiplusShutdown(gdiplusToken); 
    return; 
} 

int main() 
{ 
    SaveFile(); 
    return 0; 
} 

Но изображение сохраняется с горизонтальным и вертикальным разрешением 7dpi, независимо от того, что значение «quelity», мне нужно сохранить jpg с 96dpi, как я могу установить это?

Заранее спасибо.

ответ

0

модифицированная версия функции SaveFile() решить эту проблему:

VOID SaveFile() 
{ 
// Initialize GDI+. 
Gdiplus::GdiplusStartupInput gdiplusStartupInput; 
ULONG_PTR gdiplusToken; 
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); 

CLSID encoderClsid; 
Status stat; 
EncoderParameters encoderParameters; 
ULONG quality; 

Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(L"plot.bmp"); 
Gdiplus::REAL dpi = 72; 
bitmap->SetResolution(dpi,dpi); 


// Get the CLSID of the PNG encoder. 
GetEncoderClsid(L"image/jpeg", &encoderClsid); 

encoderParameters.Count = 1; 
encoderParameters.Parameter[0].Guid = EncoderQuality; 
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; 
encoderParameters.Parameter[0].NumberOfValues = 1; 

quality = 100; 
encoderParameters.Parameter[0].Value = &quality; 

stat = bitmap->Save(L"plot.jpg", &encoderClsid, &encoderParameters); 


if (stat == Ok) 
    printf("plot.jpg was saved successfully\n"); 
else 
    printf("Failure: stat = %d\n", stat); 

delete bitmap; 
GdiplusShutdown(gdiplusToken); 
return; 
}