Проблемы с ID2D1bitmap

Я пытаюсь сохранить ID2D1bitmap в файл в соответствии с этим Как сохранить ID2D1Bitmap в файл PNG

Можно ли это сделать в windows 7? без обновления платформы?

Я получаю необработанное исключение. (Чтение нарушения Aceess) по адресу:

if (SUCCEEDED(hr))
{
    hr = m_pWICFactory->CreateBitmap(
        sc_bitmapWidth,
        sc_bitmapHeight,
        GUID_WICPixelFormat32bppPBGRA,
        WICBitmapCacheOnLoad,
        &pWICBitmap
        );
}

Я объявил m_pWICFactory и m_pDirect2dFactory как:

ID2D1Factory* m_pDirect2dFactory;
IWICImagingFactory *m_pWICFactory;

Кто-нибудь может объяснить мне проблему?


person user2557850    schedule 01.06.2014    source источник
comment
Можете ли вы извлечь минимальный, но полный пример, демонстрирующий проблему? В нынешнем виде информации слишком мало, чтобы сказать, что происходит.   -  person Ulrich Eckhardt    schedule 01.06.2014
comment
Вы вызывали CoCreateInstance для инициализации указателя на фактический объект IWICImagingFactory?   -  person ScottMcP-MVP    schedule 01.06.2014


Ответы (1)


Я почти уверен, что у вас нулевое значение m_pWICFactory (потому что сообщение, на которое вы ссылаетесь, не содержит этого кода). Вы инициализировали его перед использованием? Обычно это делается с помощью такой функции-члена и вызывается перед выполнением других операций, для которых требуется фабрика.

HRESULT CreateDeviceIndependentResources()
{
    HRESULT hr;

    // Create a Direct2D factory.
    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);

    if (SUCCEEDED(hr))
    {
        // Create a WIC factory.
        CoCreateInstance(
            CLSID_WICImagingFactory,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IWICImagingFactory,
            reinterpret_cast<void **>(&m_pWICFactory)
            );
    }
    return hr;
}

Дополнительные сведения см. В разделе Использование компонента Windows Imaging в MSDN. .

person legends2k    schedule 01.06.2014
comment
Выходное изображение просто пустое с белым цветом, похожее на проблему, с которой изначально столкнулся этот пользователь [ссылка] (stackoverflow.com/questions/11447489/) однако я отлаживал свой код и, в отличие от него, hr = S_OK повсюду. В чем проблема ? - person user2557850; 02.06.2014
comment
Убедитесь, что у вас есть действительный pBitmap, созданный из того же объекта ID2D1Factory. - person legends2k; 02.06.2014