Compartir a través de


Bitmap.LockBits Método

Definición

Bloquea un objeto Bitmap en la memoria del sistema.

Sobrecargas

LockBits(Rectangle, ImageLockMode, PixelFormat)

Bloquea un objeto Bitmap en la memoria del sistema.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Bloquea un objeto Bitmap en la memoria del sistema.

LockBits(Rectangle, ImageLockMode, PixelFormat)

Source:
Bitmap.cs
Source:
Bitmap.cs
Source:
Bitmap.cs

Bloquea un objeto Bitmap en la memoria del sistema.

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

Parámetros

rect
Rectangle

Estructura Rectangle que especifica la parte de Bitmap que se va a bloquear.

flags
ImageLockMode

Enumeración ImageLockMode que especifica el nivel de acceso (lectura y escritura) para el objeto Bitmap.

format
PixelFormat

Enumeración PixelFormat que especifica el formato de datos de este objeto Bitmap.

Devoluciones

Objeto BitmapData que contiene información sobre esta operación de bloqueo.

Excepciones

La enumeración PixelFormat no es un valor específico de bits por píxel.

o bien

Se pasó una enumeración PixelFormat incorrecta para un mapa de bits.

Error en la operación.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar las PixelFormatpropiedades , Height, Widthy , los LockBits métodos y Scan0UnlockBits y y la ImageLockMode enumeración . Este ejemplo está diseñado para usarse con Windows Forms. Este ejemplo no está diseñado para funcionar correctamente con todos los formatos de píxeles, sino para proporcionar un ejemplo de cómo usar el LockBits método . Para ejecutar este ejemplo, péguelo en un formulario y controle el evento del Paint formulario mediante una llamada al LockUnlockBitsExample método , pasando e como 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

Comentarios

Use el LockBits método para bloquear un mapa de bits existente en la memoria del sistema para que se pueda cambiar mediante programación. Puede cambiar el color de una imagen con el SetPixel método , aunque el LockBits método ofrece un mejor rendimiento para los cambios a gran escala.

BitmapData especifica los atributos de Bitmap, como el tamaño, el formato de píxel, la dirección inicial de los datos de píxeles en la memoria y la longitud de cada línea de examen (intervalo).

Al llamar a este método, debe usar un miembro de la System.Drawing.Imaging.PixelFormat enumeración que contiene un valor específico de bits por píxel (BPP). El uso de System.Drawing.Imaging.PixelFormat valores como Indexed y Gdi producirá una System.ArgumentExceptionexcepción . Además, al pasar el formato de píxel incorrecto para un mapa de bits se producirá una System.ArgumentExceptionexcepción .

Se aplica a

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Source:
Bitmap.cs
Source:
Bitmap.cs
Source:
Bitmap.cs

Bloquea un objeto Bitmap en la memoria del sistema.

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

Parámetros

rect
Rectangle

Estructura de rectángulo que especifica la parte de Bitmap que se va a bloquear.

flags
ImageLockMode

Uno de los valores de ImageLockMode que especifica el nivel de acceso (lectura y escritura) para Bitmap.

format
PixelFormat

Uno de los valores de PixelFormat que especifica el formato de datos de Bitmap.

bitmapData
BitmapData

BitmapData que contiene información de la operación de bloqueo.

Devoluciones

BitmapData que contiene información de la operación de bloqueo.

Excepciones

El valor de PixelFormat no es un valor específico de bits por píxel.

o bien

Se pasó una enumeración PixelFormat incorrecta para un mapa de bits.

Error en la operación.

Comentarios

Use el LockBits método para bloquear un mapa de bits existente en la memoria del sistema para que se pueda cambiar mediante programación. Puede cambiar el color de una imagen con el SetPixel método , aunque el LockBits método ofrece un mejor rendimiento para los cambios a gran escala.

Al llamar a este método, debe usar un miembro de la System.Drawing.Imaging.PixelFormat enumeración que contiene un valor específico de bits por píxel (BPP). El uso System.Drawing.Imaging.PixelFormat de valores, como Indexed y Gdi, producirá una System.ArgumentExceptionexcepción . Además, al pasar el formato de píxel incorrecto para un mapa de bits se producirá una System.ArgumentExceptionexcepción .

Esta versión del LockBits método está pensada para usarse con un flags valor de ImageLockMode.UserInputBuffer.

Se aplica a