Bitmap.LockBits Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Bloqueia uma Bitmap memória do sistema.
Sobrecargas
| Nome | Description |
|---|---|
| LockBits(Rectangle, ImageLockMode, PixelFormat) |
Bloqueia uma Bitmap memória do sistema. |
| LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) |
Bloqueia uma Bitmap memória do sistema. |
LockBits(Rectangle, ImageLockMode, PixelFormat)
Bloqueia uma Bitmap 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
- flags
- ImageLockMode
Uma ImageLockMode enumeração que especifica o nível de acesso (leitura/gravação) para o Bitmap.
- format
- PixelFormat
Uma PixelFormat enumeração que especifica o formato de dados deste Bitmap.
Retornos
Um BitmapData que contém informações sobre essa operação de bloqueio.
Exceções
Não PixelFormat é um valor de bits por pixel específico.
-ou-
O incorreto PixelFormat é passado para um bitmap.
Falha na operação.
Exemplos
O exemplo de código a seguir demonstra como usar as PixelFormatpropriedades, WidthHeightScan0 as propriedades e os métodos e a LockBits enumeração.UnlockBitsImageLockMode Este exemplo foi projetado para ser usado com o 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 grande escala.
Especifica BitmapData 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)
Bloqueia uma Bitmap 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 de retângulo que especifica a parte do Bitmap bloqueio a ser bloqueado.
- flags
- ImageLockMode
Um dos ImageLockMode valores que especifica o nível de acesso (leitura/gravação) para o Bitmap.
- format
- PixelFormat
Um dos PixelFormat valores 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
PixelFormat o valor não é um valor de bits por pixel específico.
-ou-
O incorreto PixelFormat é 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 grande 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. 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.
Esta versão do LockBits método destina-se a ser usada com um flags valor de ImageLockMode.UserInputBuffer.