Bitmap.LockBits Méthode

Définition

Verrouille Bitmap dans la mémoire système.Locks a Bitmap into system memory.

Surcharges

LockBits(Rectangle, ImageLockMode, PixelFormat)

Verrouille Bitmap dans la mémoire système.Locks a Bitmap into system memory.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Verrouille Bitmap dans la mémoire système.Locks a Bitmap into system memory.

LockBits(Rectangle, ImageLockMode, PixelFormat)

Verrouille Bitmap dans la mémoire système.Locks a Bitmap into system memory.

public:
 System::Drawing::Imaging::BitmapData ^ LockBits(System::Drawing::Rectangle rect, System::Drawing::Imaging::ImageLockMode flags, System::Drawing::Imaging::PixelFormat format);
public System.Drawing.Imaging.BitmapData LockBits (System.Drawing.Rectangle rect, System.Drawing.Imaging.ImageLockMode flags, System.Drawing.Imaging.PixelFormat format);
member this.LockBits : System.Drawing.Rectangle * System.Drawing.Imaging.ImageLockMode * System.Drawing.Imaging.PixelFormat -> System.Drawing.Imaging.BitmapData
Public Function LockBits (rect As Rectangle, flags As ImageLockMode, format As PixelFormat) As BitmapData

Paramètres

rect
Rectangle

Structure Rectangle qui spécifie la partie de Bitmap à verrouiller.A Rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode

Énumération ImageLockMode qui spécifie le niveau d'accès (lecture/écriture) de Bitmap.An ImageLockMode enumeration that specifies the access level (read/write) for the Bitmap.

format
PixelFormat

Énumération PixelFormat qui spécifie le format de données de ce Bitmap.A PixelFormat enumeration that specifies the data format of this Bitmap.

Retours

BitmapData qui contient des informations sur cette opération de verrouillage.A BitmapData that contains information about this lock operation.

Exceptions

PixelFormat n'est pas une valeur en bits par pixel spécifique.The PixelFormat is not a specific bits-per-pixel value.

-ou--or- Le PixelFormat inexact est passé pour une bitmap.The incorrect PixelFormat is passed in for a bitmap.

L'opération a échoué.The operation failed.

Exemples

L’exemple de code suivant montre comment utiliser les propriétés PixelFormat, Height, Widthet Scan0 ; les méthodes LockBits et UnlockBits ; et l’énumération ImageLockMode.The following code example demonstrates how to use the PixelFormat, Height, Width, and Scan0 properties; the LockBits and UnlockBits methods; and the ImageLockMode enumeration. Cet exemple est conçu pour être utilisé avec Windows Forms.This example is designed to be used with Windows Forms. Cet exemple n’est pas conçu pour fonctionner correctement avec tous les formats de pixel, mais pour fournir un exemple d’utilisation de la méthode LockBits.This example is not designed to work correctly with all pixel formats, but to provide an example of how to use the LockBits method. Pour exécuter cet exemple, collez-le dans un formulaire et gérez l’événement Paint du formulaire en appelant la méthode LockUnlockBitsExample, en passant e en tant que PaintEventArgs.To run this example, paste it into a form and handle the form's Paint event by calling the LockUnlockBitsExample method, passing e as PaintEventArgs.

void LockUnlockBitsExample( PaintEventArgs^ e )
{
   // Create a new bitmap.
   Bitmap^ bmp = gcnew Bitmap( "c:\\fakePhoto.jpg" );

   // Lock the bitmap's bits.  
   Rectangle rect = Rectangle(0,0,bmp->Width,bmp->Height);
   System::Drawing::Imaging::BitmapData^ bmpData = bmp->LockBits( rect, System::Drawing::Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat );

   // Get the address of the first line.
   IntPtr ptr = bmpData->Scan0;

   // Declare an array to hold the bytes of the bitmap.
   // This code is specific to a bitmap with 24 bits per pixels.
   int bytes = Math::Abs(bmpData->Stride) * bmp->Height;
   array<Byte>^rgbValues = gcnew array<Byte>(bytes);

   // Copy the RGB values into the array.
   System::Runtime::InteropServices::Marshal::Copy( ptr, rgbValues, 0, bytes );

   // Set every third value to 255.  
   for ( int counter = 2; counter < rgbValues->Length; counter += 3 )
      rgbValues[ counter ] = 255;

   // Copy the RGB values back to the bitmap
   System::Runtime::InteropServices::Marshal::Copy( rgbValues, 0, ptr, bytes );

   // Unlock the bits.
   bmp->UnlockBits( bmpData );

   // Draw the modified image.
   e->Graphics->DrawImage( bmp, 0, 150 );
}
private void LockUnlockBitsExample(PaintEventArgs e)
    {

        // Create a new bitmap.
        Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");

        // Lock the bitmap's bits.  
        Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
        System.Drawing.Imaging.BitmapData bmpData =
            bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
            bmp.PixelFormat);

        // Get the address of the first line.
        IntPtr ptr = bmpData.Scan0;

        // Declare an array to hold the bytes of the bitmap.
        int bytes  = Math.Abs(bmpData.Stride) * bmp.Height;
        byte[] rgbValues = new byte[bytes];

        // Copy the RGB values into the array.
        System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

        // Set every third value to 255. A 24bpp bitmap will look red.  
        for (int counter = 2; counter < rgbValues.Length; counter += 3)
            rgbValues[counter] = 255;

        // Copy the RGB values back to the bitmap
        System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);

        // Unlock the bits.
        bmp.UnlockBits(bmpData);

        // Draw the modified image.
        e.Graphics.DrawImage(bmp, 0, 150);
    }

Private Sub LockUnlockBitsExample(ByVal e As PaintEventArgs)

    ' Create a new bitmap.
    Dim bmp As New Bitmap("c:\fakePhoto.jpg")

    ' Lock the bitmap's bits.  
    Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
    Dim bmpData As System.Drawing.Imaging.BitmapData = bmp.LockBits(rect, _
        Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)

    ' Get the address of the first line.
    Dim ptr As IntPtr = bmpData.Scan0

    ' Declare an array to hold the bytes of the bitmap.
    ' This code is specific to a bitmap with 24 bits per pixels.
    Dim bytes As Integer = Math.Abs(bmpData.Stride) * bmp.Height
    Dim rgbValues(bytes - 1) As Byte

    ' Copy the RGB values into the array.
    System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)

    ' Set every third value to 255. A 24bpp image will look red.
    For counter As Integer = 2 To rgbValues.Length - 1 Step 3
        rgbValues(counter) = 255
    Next

    ' Copy the RGB values back to the bitmap
    System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes)

    ' Unlock the bits.
    bmp.UnlockBits(bmpData)

    ' Draw the modified image.
    e.Graphics.DrawImage(bmp, 0, 150)

End Sub

Remarques

Utilisez la méthode LockBits pour verrouiller une image bitmap existante dans la mémoire système afin qu’elle puisse être modifiée par programmation.Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. Vous pouvez modifier la couleur d’une image à l’aide de la méthode SetPixel, bien que la méthode LockBits offre de meilleures performances pour les modifications à grande échelle.You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

L' BitmapData spécifie les attributs du Bitmap, tels que la taille, le format de pixel, l’adresse de début des données de pixels en mémoire et la longueur de chaque ligne de numérisation (Stride).The BitmapData specifies the attributes of the Bitmap, such as size, pixel format, the starting address of the pixel data in memory, and length of each scan line (stride).

Quand vous appelez cette méthode, vous devez utiliser un membre de l’énumération System.Drawing.Imaging.PixelFormat qui contient une valeur spécifique en bits par pixel (BPP).When calling this method, you should use a member of the System.Drawing.Imaging.PixelFormat enumeration that contains a specific bits-per-pixel (BPP) value. L’utilisation de valeurs System.Drawing.Imaging.PixelFormat telles que Indexed et Gdi lèvera une System.ArgumentException.Using System.Drawing.Imaging.PixelFormat values such as Indexed and Gdi will throw an System.ArgumentException. En outre, le passage du format de pixel incorrect pour une image bitmap lève une System.ArgumentException.Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Verrouille Bitmap dans la mémoire système.Locks a Bitmap into system memory.

public:
 System::Drawing::Imaging::BitmapData ^ LockBits(System::Drawing::Rectangle rect, System::Drawing::Imaging::ImageLockMode flags, System::Drawing::Imaging::PixelFormat format, System::Drawing::Imaging::BitmapData ^ bitmapData);
public System.Drawing.Imaging.BitmapData LockBits (System.Drawing.Rectangle rect, System.Drawing.Imaging.ImageLockMode flags, System.Drawing.Imaging.PixelFormat format, System.Drawing.Imaging.BitmapData bitmapData);
member this.LockBits : System.Drawing.Rectangle * System.Drawing.Imaging.ImageLockMode * System.Drawing.Imaging.PixelFormat * System.Drawing.Imaging.BitmapData -> System.Drawing.Imaging.BitmapData
Public Function LockBits (rect As Rectangle, flags As ImageLockMode, format As PixelFormat, bitmapData As BitmapData) As BitmapData

Paramètres

rect
Rectangle

Structure rectangle qui spécifie la partie de Bitmap à verrouiller.A rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode

Une des valeurs ImageLockMode qui spécifie le niveau d'accès (lecture/écriture) de Bitmap.One of the ImageLockMode values that specifies the access level (read/write) for the Bitmap.

format
PixelFormat

Une des valeurs PixelFormat qui spécifie le format des données de Bitmap.One of the PixelFormat values that specifies the data format of the Bitmap.

bitmapData
BitmapData

BitmapData qui contient des informations sur l'opération de verrouillage.A BitmapData that contains information about the lock operation.

Retours

BitmapData qui contient des informations sur l'opération de verrouillage.A BitmapData that contains information about the lock operation.

Exceptions

La valeur PixelFormat n'est pas une valeur en bits par pixel spécifique.PixelFormat value is not a specific bits-per-pixel value.

-ou--or- Le PixelFormat inexact est passé pour une bitmap.The incorrect PixelFormat is passed in for a bitmap.

L'opération a échoué.The operation failed.

Remarques

Utilisez la méthode LockBits pour verrouiller une image bitmap existante dans la mémoire système afin qu’elle puisse être modifiée par programmation.Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. Vous pouvez modifier la couleur d’une image à l’aide de la méthode SetPixel, bien que la méthode LockBits offre de meilleures performances pour les modifications à grande échelle.You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

Quand vous appelez cette méthode, vous devez utiliser un membre de l’énumération System.Drawing.Imaging.PixelFormat qui contient une valeur spécifique en bits par pixel (BPP).When calling this method, you should use a member of the System.Drawing.Imaging.PixelFormat enumeration that contains a specific bits-per-pixel (BPP) value. L’utilisation de valeurs System.Drawing.Imaging.PixelFormat, telles que Indexed et Gdi, lèvera une System.ArgumentException.Using System.Drawing.Imaging.PixelFormat values, such as Indexed and Gdi, will throw an System.ArgumentException. En outre, le passage du format de pixel incorrect pour une image bitmap lève une System.ArgumentException.Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

Cette version de la méthode LockBits est conçue pour être utilisée avec une valeur flags de ImageLockMode.UserInputBuffer.This version of the LockBits method is intended to be used with a flags value of ImageLockMode.UserInputBuffer.

S’applique à