Bitmap.LockBits Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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)
- Source:
- Bitmap.cs
- Source:
- Bitmap.cs
- Source:
- Bitmap.cs
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
- 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)
- Source:
- Bitmap.cs
- Source:
- Bitmap.cs
- Source:
- Bitmap.cs
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
- 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