Share via


Método IWICBitmap::Lock (wincodec.h)

Fornece acesso a uma área retangular do bitmap.

Sintaxe

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

Parâmetros

[in] prcLock

Tipo: const WICRect*

O retângulo a ser acessado.

[in] flags

Tipo: DWORD

O modo de acesso que você deseja obter para o bloqueio. Essa é uma combinação bit a bit de WICBitmapLockFlags para acesso de leitura, gravação ou leitura e gravação.

Valor Significado
WICBitmapLockRead
O bloqueio de acesso de leitura.
WICBitmapLockWrite
O bloqueio de acesso de gravação.

[out] ppILock

Tipo: IWICBitmapLock**

Um ponteiro que recebe o local de memória bloqueada.

Valor retornado

Tipo: HRESULT

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Os bloqueios são exclusivos para escrita, mas podem ser compartilhados para leitura. Não é possível chamar CopyPixels enquanto o IWICBitmap estiver bloqueado para gravação. Isso retornará um erro, pois os bloqueios são exclusivos.

Exemplos

No exemplo a seguir, um IWICBitmap é criado e os dados da imagem são limpos usando um 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;

Requisitos

   
Cliente mínimo com suporte Windows XP com SP2, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincodec.h
Biblioteca Windowscodecs.lib
DLL Windowscodecs.dll