Bitmap.LockBits Méthode

Définition

Verrouille Bitmap dans la mémoire système.

Surcharges

LockBits(Rectangle, ImageLockMode, PixelFormat)

Verrouille Bitmap dans la mémoire système.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Verrouille Bitmap dans la mémoire système.

LockBits(Rectangle, ImageLockMode, PixelFormat)

Verrouille Bitmap dans la mémoire système.

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.

flags
ImageLockMode

Énumération ImageLockMode qui spécifie le niveau d'accès (lecture/écriture) de Bitmap.

format
PixelFormat

Énumération PixelFormat qui spécifie le format de données de ce Bitmap.

Retours

BitmapData qui contient des informations sur cette opération de verrouillage.

Exceptions

PixelFormat n'est pas une valeur en bits par pixel spécifique.

- ou -

Le PixelFormat inexact est passé pour une bitmap.

L'opération a échoué.

Exemples

L’exemple de code suivant montre comment utiliser les PixelFormatpropriétés , Height, Widthet Scan0 les LockBits méthodes et UnlockBits et l’énumération ImageLockMode . Cet exemple est conçu pour être utilisé avec Windows Forms. Cet exemple n’est pas conçu pour fonctionner correctement avec tous les formats de pixels, mais pour fournir un exemple d’utilisation de la LockBits méthode . Pour exécuter cet exemple, collez-le dans un formulaire et gérez l’événement du Paint formulaire en appelant la LockUnlockBitsExample méthode, en passant e comme 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 LockBits méthode pour verrouiller une bitmap existante dans la mémoire système afin qu’elle puisse être modifiée par programmation. Vous pouvez modifier la couleur d’une image avec la SetPixel méthode , bien que la LockBits méthode offre de meilleures performances pour les modifications à grande échelle.

Spécifie BitmapData les attributs du , tels que la taille, le Bitmapformat du pixel, l’adresse de départ des données de pixel en mémoire et la longueur de chaque ligne de balayage (stride).

Lorsque vous appelez cette méthode, vous devez utiliser un membre de l’énumération System.Drawing.Imaging.PixelFormat qui contient une valeur BPP (bits par pixel) spécifique. L’utilisation System.Drawing.Imaging.PixelFormat de valeurs telles que Indexed et Gdi lève un System.ArgumentException. En outre, la transmission d’un format de pixel incorrect pour une bitmap lève un System.ArgumentException.

S’applique à

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Verrouille Bitmap dans la mémoire système.

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.

flags
ImageLockMode

Une des valeurs ImageLockMode qui spécifie le niveau d'accès (lecture/écriture) de Bitmap.

format
PixelFormat

Une des valeurs PixelFormat qui spécifie le format des données de Bitmap.

bitmapData
BitmapData

BitmapData qui contient des informations sur l'opération de verrouillage.

Retours

BitmapData qui contient des informations sur l'opération de verrouillage.

Exceptions

La valeur PixelFormat n'est pas une valeur en bits par pixel spécifique.

- ou -

Le PixelFormat inexact est passé pour une bitmap.

L'opération a échoué.

Remarques

Utilisez la LockBits méthode pour verrouiller une bitmap existante dans la mémoire système afin qu’elle puisse être modifiée par programmation. Vous pouvez modifier la couleur d’une image avec la SetPixel méthode , bien que la LockBits méthode offre de meilleures performances pour les modifications à grande échelle.

Lorsque vous appelez cette méthode, vous devez utiliser un membre de l’énumération System.Drawing.Imaging.PixelFormat qui contient une valeur BPP (bits par pixel) spécifique. L’utilisation System.Drawing.Imaging.PixelFormat de valeurs, telles que Indexed et Gdi, lève un System.ArgumentException. En outre, la transmission d’un format de pixel incorrect pour une bitmap lève un System.ArgumentException.

Cette version de la LockBits méthode est destinée à être utilisée avec la flags valeur .ImageLockMode.UserInputBuffer

S’applique à