하루종일 삽질 삽질을 거듭하여 샘플정도로 간단하게 만들어 봤습니다.
CComPtrm_pImgFactory; CComPtr image; m_pImgFactory->CreateImageFromFile(filename, &image); CComQIPtr pBitmap; CComPtr pBitmapOps; // 불러온 Iimage로 IBitmapImage 생성 m_pImgFactory->CreateBitmapFromImage(image, 0, 0, PixelFormatDontCare, InterpolationHintNearestNeighbor, &pBitmap); pBitmap->QueryInterface(IID_IBasicBitmapOps, (void**)&pBitmapOps); pBitmap.Release(); // 이미지 90도 회전 pBitmapOps->Rotate(90, InterpolationHintNearestNeighbor, &pBitmap); image.Release(); pBitmapOps.Release(); pBitmap->QueryInterface(IID_IImage, (void**)&image); // 인코딩 코덱 찾기 ImageCodecInfo * codecinfo; UINT count; CLSID clsid; m_pImgFactory->GetInstalledEncoders(&count, &codecinfo); for(UINT i = 0; i < count ; i++) { // JPEG 코덱 찾기 if(wcscmp(codecinfo[i].MimeType, _T("image/jpeg")) == 0) { clsid = codecinfo[i].Clsid; break; } } free(codecinfo); // 인코딩할 파일 저장 CComPtr pEncoder; m_pImgFactory->CreateImageEncoderToFile(&clsid, _T("파일명"), &pEncoder); // 인코딩할 이미지 싱크 생성 CComPtr pImgSink; pEncoder->GetEncodeSink(&pImgSink); // 기존의 이미지를 이미지 싱크로 보냄 image->PushIntoSink(pImgSink); pImgSink.Release(); // 인코딩 종료 pEncoder->TerminateEncoder(); pEncoder.Release();
회전 한 파일이 파일명으로 바로 저장됩니다.