Partilhar via


Bitmap.LockBits Método

Definição

Bloqueia um Bitmap na memória do sistema.

Sobrecargas

LockBits(Rectangle, ImageLockMode, PixelFormat)

Bloqueia um Bitmap na memória do sistema.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Bloqueia um Bitmap na memória do sistema.

LockBits(Rectangle, ImageLockMode, PixelFormat)

Origem:
Bitmap.cs
Origem:
Bitmap.cs
Origem:
Bitmap.cs

Bloqueia um Bitmap na memória do 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

Uma estrutura Rectangle que especifica a parte do Bitmap a ser bloqueada.

flags
ImageLockMode

Uma enumeração ImageLockMode que especifica o nível de acesso (leitura/gravação) do Bitmap.

format
PixelFormat

Uma enumeração PixelFormat que especifica o formato de dados deste Bitmap.

Retornos

Um BitmapData que contém informações sobre essa operação de bloqueio.

Exceções

O PixelFormat não é um valor bits por pixel específico.

- ou -

O PixelFormat incorreto é passado para um bitmap.

Falha na operação.

Exemplos

O exemplo de código a seguir demonstra como usar as PixelFormatpropriedades , Height, Widthe Scan0 , e os LockBits métodos e UnlockBits e a ImageLockMode enumeração . Este exemplo foi projetado para ser usado com Windows Forms. Este exemplo não foi projetado para funcionar corretamente com todos os formatos de pixel, mas para fornecer um exemplo de como usar o LockBits método . Para executar este exemplo, cole-o em um formulário e manipule o evento do Paint formulário chamando o LockUnlockBitsExample método , passando 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

Comentários

Use o LockBits método para bloquear um bitmap existente na memória do sistema para que ele possa ser alterado programaticamente. Você pode alterar a cor de uma imagem com o SetPixel método , embora o LockBits método ofereça melhor desempenho para alterações em larga escala.

O BitmapData especifica os atributos do Bitmap, como tamanho, formato de pixel, o endereço inicial dos dados de pixel na memória e o comprimento de cada linha de verificação (passo a passo).

Ao chamar esse método, você deve usar um membro da System.Drawing.Imaging.PixelFormat enumeração que contém um valor BPP (bits por pixel) específico. Usar System.Drawing.Imaging.PixelFormat valores como Indexed e Gdi gerará um System.ArgumentException. Além disso, passar o formato de pixel incorreto para um bitmap gerará um System.ArgumentException.

Aplica-se a

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Origem:
Bitmap.cs
Origem:
Bitmap.cs
Origem:
Bitmap.cs

Bloqueia um Bitmap na memória do 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

Uma estrutura em retângulo que especifica a parte do Bitmap a ser bloqueada.

flags
ImageLockMode

Um dos valores ImageLockMode que especifica o nível de acesso (leitura/gravação) do Bitmap.

format
PixelFormat

Um dos valores PixelFormat que especifica o formato de dados do Bitmap.

bitmapData
BitmapData

Um BitmapData que contém informações sobre a operação de bloqueio.

Retornos

Um BitmapData que contém informações sobre a operação de bloqueio.

Exceções

O valor PixelFormat não é um valor bits por pixel específico.

- ou -

O PixelFormat incorreto é passado para um bitmap.

Falha na operação.

Comentários

Use o LockBits método para bloquear um bitmap existente na memória do sistema para que ele possa ser alterado programaticamente. Você pode alterar a cor de uma imagem com o SetPixel método , embora o LockBits método ofereça melhor desempenho para alterações em larga escala.

Ao chamar esse método, você deve usar um membro da System.Drawing.Imaging.PixelFormat enumeração que contém um valor BPP (bits por pixel) específico. O uso System.Drawing.Imaging.PixelFormat de valores, como Indexed e Gdi, gerará um System.ArgumentException. Além disso, passar o formato de pixel incorreto para um bitmap gerará um System.ArgumentException.

Esta versão do LockBits método destina-se a ser usada com um flags valor de ImageLockMode.UserInputBuffer.

Aplica-se a