Partager via


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

Fournit l’accès à une zone rectangulaire de la bitmap.

Syntaxe

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

Paramètres

[in] prcLock

Type : const WICRect*

Rectangle à accéder.

[in] flags

Type : DWORD

Mode d’accès que vous souhaitez obtenir pour le verrou. Il s’agit d’une combinaison de bits de WICBitmapLockFlags pour l’accès en lecture, en écriture ou en lecture et en écriture.

Valeur Signification
WICBitmapLockRead
Verrou d’accès en lecture.
WICBitmapLockWrite
Verrou d’accès en écriture.

[out] ppILock

Type : IWICBitmapLock**

Pointeur qui reçoit l’emplacement de mémoire verrouillé.

Valeur retournée

Type : HRESULT

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Les verrous sont exclusifs pour l’écriture, mais peuvent être partagés pour la lecture. Vous ne pouvez pas appeler CopyPixels tant que le IWICBitmap est verrouillé pour l’écriture. Cela renvoie une erreur, car les verrous sont exclusifs.

Exemples

Dans l’exemple suivant, un IWICBitmap est créé et les données d’image sont effacées à l’aide d’un 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;

Configuration requise

   
Client minimal pris en charge Windows XP avec SP2, Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête wincodec.h
Bibliothèque Windowscodecs.lib
DLL Windowscodecs.dll