ランダム アクセス ストリームからビットマップを作成するときに、EXIF の向きに従って自動的に回転させたいと考えています。次のコード スニペットを拡張してみましょう。
ComPtr<IWICImagingFactory2> wicFactory2; // Details of factory creation omitted
ComPtr<IWICBitmapDecoder> wicBitmapDecoder;
wicFactory2->CreateDecoderFromStream(
stream.Get(), // stream is a valid ComPtr<IStream>
nullptr,
WICDecodeMetadataCacheOnDemand,
&wicBitmapDecoder
);
ComPtr<IWICBitmapFrameDecode> wicFrameDecode;
wicBitmapDecoder->GetFrame(
0,
&wicFrameDecode
);
ComPtr<IWICFormatConverter> wicFormatConverter;
wicFactory2->CreateFormatConverter(
&wicFormatConverter
);
wicFormatConverter->Initialize(
wicFrameDecode.Get(),
GUID_WICPixelFormat32bppPBGRA,
WICBitmapDitherTypeNone,
NULL,
0.f,
WICBitmapPaletteTypeMedianCut
);
// <-- What code to insert here to respect EXIF orientation???
ComPtr<ID2D1Bitmap1> bitmap;
m_d2dContext->CreateBitmapFromWicBitmap(
wicFormatConverter.Get(),
&bitmap
);
私が探している動作は、ExifOrientationMode を RespectExifOrientation に設定してBitmapDecoder.GetPixelDataAsyncを呼び出すことに似ています。ただし、ビットマップは Direct2D 効果への入力として機能するため、この関数を使用することはできません。したがって、CPU が生のピクセル データにアクセスする必要はありません。