2 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
除非jpeg的寬度和高度都是16的倍數(shù),否則無法這樣做。如果在GDI+中進(jìn)行此操作,并且寬度和高度不是16的倍數(shù),GDI+將盡最大努力保持壓縮質(zhì)量相同。在.net中也是一樣
請注意,您的 GDI+ 代碼只會旋轉(zhuǎn)縮略圖。要旋轉(zhuǎn)圖像,請使用以下代碼:
void RotateImage()
{
//new/delete operator is not necessary, unless
//Gdiplus startup/shutdown is in the same scope
Gdiplus::Image image(L"source.jpg");
if((image.GetWidth() % 16) != 0 || (image.GetHeight() % 16) != 0)
wprintf(L"Lossless compression is not possible\n");
Gdiplus::EncoderParameters encoder_params;
encoder_params.Count = 1;
encoder_params.Parameter[0].Guid = Gdiplus::EncoderTransformation;
encoder_params.Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong;
encoder_params.Parameter[0].NumberOfValues = 1;
//rotate
ULONG transformation = Gdiplus::EncoderValueTransformRotate90;
encoder_params.Parameter[0].Value = &transformation;
CLSID clsid;
GetEncoderClsid(L"image/jpeg", &clsid);
auto stat = image.Save(L"destination.jpg", &clsid, &encoder_params);
wprintf(L"Save %s\n", (stat == Gdiplus::Ok) ? L"succeeded" : L"failed");
}
int main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
RotateImage();
Gdiplus::GdiplusShutdown(gdiplusToken);
return 0;
}

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
以編程方式執(zhí)行此操作的方法是讀取 SOS 市場之后應(yīng)出現(xiàn)的 APP1 標(biāo)記。獲取標(biāo)記結(jié)構(gòu)的 JPEG 文檔。
擁有 APP1 標(biāo)記后,您需要根據(jù)需要更改方向。
然后將 SOS 標(biāo)記、修改后的 APP1 標(biāo)記以及 APP1 標(biāo)記之后的其余 JPEG 流寫入新文件。
這就是他們的全部。唯一的復(fù)雜性是導(dǎo)航 EXIF 文檔以進(jìn)行方向設(shè)置。
- 2 回答
- 0 關(guān)注
- 236 瀏覽
添加回答
舉報(bào)