Bitmap.LockBits Bitmap.LockBits Bitmap.LockBits Bitmap.LockBits Method

Definizione

Blocca un oggetto Bitmap nella memoria di sistema.Locks a Bitmap into system memory.

Overload

LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat)

Blocca un oggetto Bitmap nella memoria di sistema.Locks a Bitmap into system memory.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Blocca un oggetto Bitmap nella memoria di sistema.Locks a Bitmap into system memory.

LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat)

Blocca un oggetto Bitmap nella memoria di sistema.Locks a Bitmap into system memory.

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

Parametri

rect
Rectangle Rectangle Rectangle Rectangle

Struttura Rectangle che specifica la parte dell'oggetto Bitmap da bloccare.A Rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode ImageLockMode ImageLockMode ImageLockMode

Enumerazione di ImageLockMode che specifica il livello di accesso (lettura/scrittura) per l'oggetto Bitmap.An ImageLockMode enumeration that specifies the access level (read/write) for the Bitmap.

format
PixelFormat PixelFormat PixelFormat PixelFormat

Enumerazione di PixelFormat che specifica il formato dati dell'oggetto Bitmap.A PixelFormat enumeration that specifies the data format of this Bitmap.

Restituisce

Oggetto BitmapData contenente informazioni sull'operazione di blocco.A BitmapData that contains information about this lock operation.

Eccezioni

L'oggetto PixelFormat non rappresenta un valore bit per pixel specifico.The PixelFormat is not a specific bits-per-pixel value.

-oppure--or- Per una bitmap viene passato un PixelFormat non corretto.The incorrect PixelFormat is passed in for a bitmap.

Operazione non riuscita.The operation failed.

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare le proprietà PixelFormat, Height, Width e Scan0. Metodi LockBits e UnlockBits; e l'enumerazione ImageLockMode.The following code example demonstrates how to use the PixelFormat, Height, Width, and Scan0 properties; the LockBits and UnlockBits methods; and the ImageLockMode enumeration. Questo esempio è progettato per essere usato con Windows Forms.This example is designed to be used with Windows Forms. Questo esempio non è progettato per funzionare correttamente con tutti i formati pixel, ma per fornire un esempio di come usare il metodo LockBits.This example is not designed to work correctly with all pixel formats, but to provide an example of how to use the LockBits method. Per eseguire questo esempio, incollarlo in un form e gestire l'evento Paint del form chiamando il metodo LockUnlockBitsExample, passando e come PaintEventArgs.To run this example, paste it into a form and handle the form's Paint event by calling the LockUnlockBitsExample method, passing e as 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

Commenti

Utilizzare il metodo LockBits per bloccare una bitmap esistente nella memoria di sistema in modo che possa essere modificata a livello di codice.Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. È possibile modificare il colore di un'immagine con il metodo SetPixel, anche se il metodo LockBits offre prestazioni migliori per le modifiche su larga scala.You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

Il BitmapData specifica gli attributi della Bitmap, ad esempio le dimensioni, il formato pixel, l'indirizzo iniziale dei dati pixel in memoria e la lunghezza di ogni riga di analisi (stride).The BitmapData specifies the attributes of the Bitmap, such as size, pixel format, the starting address of the pixel data in memory, and length of each scan line (stride).

Quando si chiama questo metodo, è necessario usare un membro dell'enumerazione System.Drawing.Imaging.PixelFormat che contiene un valore bit per pixel (BPP) specifico.When calling this method, you should use a member of the System.Drawing.Imaging.PixelFormat enumeration that contains a specific bits-per-pixel (BPP) value. Se si usano valori System.Drawing.Imaging.PixelFormat, ad esempio Indexed e Gdi, viene generata un'System.ArgumentException.Using System.Drawing.Imaging.PixelFormat values such as Indexed and Gdi will throw an System.ArgumentException. Inoltre, il passaggio del formato pixel errato per una bitmap genererà un'System.ArgumentException.Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Blocca un oggetto Bitmap nella memoria di sistema.Locks a Bitmap into system memory.

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

Parametri

rect
Rectangle Rectangle Rectangle Rectangle

Struttura rettangolare che specifica la parte dell'oggetto Bitmap da bloccare.A rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode ImageLockMode ImageLockMode ImageLockMode

Uno dei valori di ImageLockMode che specifica il livello di accesso (lettura/scrittura) per l'oggetto Bitmap.One of the ImageLockMode values that specifies the access level (read/write) for the Bitmap.

format
PixelFormat PixelFormat PixelFormat PixelFormat

Uno dei valori di PixelFormat che specifica il formato dati di Bitmap.One of the PixelFormat values that specifies the data format of the Bitmap.

bitmapData
BitmapData BitmapData BitmapData BitmapData

Oggetto BitmapData contenente informazioni sull'operazione di blocco.A BitmapData that contains information about the lock operation.

Restituisce

Oggetto BitmapData contenente informazioni sull'operazione di blocco.A BitmapData that contains information about the lock operation.

Eccezioni

Il valore di PixelFormat non rappresenta un valore bit per pixel specifico.PixelFormat value is not a specific bits-per-pixel value.

In alternativa-or- Per una bitmap viene passato un PixelFormat non corretto.The incorrect PixelFormat is passed in for a bitmap.

Operazione non riuscita.The operation failed.

Commenti

Utilizzare il metodo LockBits per bloccare una bitmap esistente nella memoria di sistema in modo che possa essere modificata a livello di codice.Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. È possibile modificare il colore di un'immagine con il metodo SetPixel, anche se il metodo LockBits offre prestazioni migliori per le modifiche su larga scala.You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

Quando si chiama questo metodo, è necessario usare un membro dell'enumerazione System.Drawing.Imaging.PixelFormat che contiene un valore bit per pixel (BPP) specifico.When calling this method, you should use a member of the System.Drawing.Imaging.PixelFormat enumeration that contains a specific bits-per-pixel (BPP) value. Se si usano valori System.Drawing.Imaging.PixelFormat, ad esempio Indexed e Gdi, viene generata un'System.ArgumentException.Using System.Drawing.Imaging.PixelFormat values, such as Indexed and Gdi, will throw an System.ArgumentException. Inoltre, il passaggio del formato pixel errato per una bitmap genererà un'System.ArgumentException.Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

Questa versione del metodo LockBits è progettata per essere usata con un valore flags di ImageLockMode.UserInputBuffer.This version of the LockBits method is intended to be used with a flags value of ImageLockMode.UserInputBuffer.

Si applica a