2

ランダム アクセス ストリームからビットマップを作成するときに、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 が生のピクセル データにアクセスする必要はありません。

4

1 に答える 1