Поделиться через


Метод IWICBitmap::Lock (wincodec.h)

Предоставляет доступ к прямоугольной области растрового изображения.

Синтаксис

HRESULT Lock(
  [in]  const WICRect  *prcLock,
  [in]  DWORD          flags,
  [out] IWICBitmapLock **ppILock
);

Параметры

[in] prcLock

Тип: const WICRect*

Прямоугольник, к который требуется получить доступ.

[in] flags

Тип: DWORD

Режим доступа, который вы хотите получить для блокировки. Это побитовое сочетание WICBitmapLockFlags для доступа на чтение, запись или чтение и запись.

Значение Значение
WICBitmapLockRead
Блокировка доступа на чтение.
WICBitmapLockWrite
Блокировка доступа на запись.

[out] ppILock

Тип: IWICBitmapLock**

Указатель, который получает заблокированное расположение памяти.

Возвращаемое значение

Тип: HRESULT

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Блокировки являются эксклюзивными для записи, но могут быть общими для чтения. Вы не можете вызвать CopyPixels , пока IWICBitmap заблокирован для записи. Это приведет к ошибке, так как блокировки являются монопольными.

Примеры

В следующем примере создается IWICBitmap , а данные изображения очищаются с помощью IWICBitmapLock.



    IWICImagingFactory *pFactory = NULL;
    IWICBitmap *pBitmap = NULL;

    UINT uiWidth = 640;
    UINT uiHeight = 480;
    WICPixelFormatGUID formatGUID = GUID_WICPixelFormat32bppBGRA;

    WICRect rcLock = { 0, 0, uiWidth, uiHeight };
    IWICBitmapLock *pLock = NULL;

    HRESULT hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IWICImagingFactory,
        (LPVOID*)&pFactory
        );

    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateBitmap(uiWidth, uiHeight, formatGUID, WICBitmapCacheOnDemand, &pBitmap);
    }

    if (SUCCEEDED(hr))
    {
        hr = pBitmap->Lock(&rcLock, WICBitmapLockWrite, &pLock);

        if (SUCCEEDED(hr))
        {
            UINT cbBufferSize = 0;
            UINT cbStride = 0;
            BYTE *pv = NULL;

            hr = pLock->GetStride(&cbStride);

            if (SUCCEEDED(hr))
            {
                hr = pLock->GetDataPointer(&cbBufferSize, &pv);
            }

            // Clear the image data
            ZeroMemory(pv, cbBufferSize);

            // Release the bitmap lock.
            pLock->Release();
        }
    }

    if (pBitmap)
    {
        pBitmap->Release();
    }

    if (pFactory)
    {
        pFactory->Release();
    }

    return hr;

Требования

   
Минимальная версия клиента Windows XP с пакетом обновления 2 (SP2), Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincodec.h
Библиотека Windowscodecs.lib
DLL Windowscodecs.dll