Bitmap.LockBits Metod

Definition

Låser en Bitmap i systemminnet.

Överlagringar

LockBits(Rectangle, ImageLockMode, PixelFormat)

Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs

Låser en Bitmap i systemminnet.

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

Parametrar

rect
Rectangle

En Rectangle struktur som anger den del av som ska låsas Bitmap .

flags
ImageLockMode

En ImageLockMode uppräkning som anger åtkomstnivån (läs/skriv) för Bitmap.

format
PixelFormat

En PixelFormat uppräkning som anger dataformatet för detta Bitmap.

Returer

En BitmapData som innehåller information om den här låsåtgärden.

Undantag

PixelFormat Är inte ett specifikt bit-per-pixel-värde.

-eller-

Det felaktiga PixelFormat skickas in för en bitmapp.

Åtgärden misslyckades.

Exempel

I följande kodexempel visas hur du använder PixelFormategenskaperna , Height, Widthoch Scan0 samt LockBits metoderna och UnlockBits och ImageLockMode uppräkningen. Det här exemplet är utformat för att användas med Windows Forms. Det här exemplet är inte utformat för att fungera korrekt med alla pixelformat, utan för att ge ett exempel på hur du använder LockBits metoden. Om du vill köra det här exemplet klistrar du in det i ett formulär och hanterar formulärets Paint händelse genom att anropa metoden och skicka LockUnlockBitsExample som ePaintEventArgs.

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

Kommentarer

LockBits Använd metoden för att låsa en befintlig bitmapp i systemminnet så att den kan ändras programmatiskt. Du kan ändra färgen på en bild med SetPixel metoden, även om LockBits metoden ger bättre prestanda för storskaliga ändringar.

BitmapData Anger attributen Bitmapför , till exempel storlek, pixelformat, startadressen för pixeldata i minnet och längden på varje genomsökningslinje (steg).

När du anropar den här metoden bör du använda en medlem i System.Drawing.Imaging.PixelFormat uppräkningen som innehåller ett specifikt BPP-värde (bits per pixel). Använda System.Drawing.Imaging.PixelFormat värden som Indexed och Gdi genererar en System.ArgumentException. Om du skickar det felaktiga pixelformatet för en bitmapp utlöser du också en System.ArgumentException.

Gäller för

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs
Källa:
Bitmap.cs

Låser en Bitmap i systemminnet.

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

Parametrar

rect
Rectangle

En rektangelstruktur som anger den del av som ska låsas Bitmap .

flags
ImageLockMode

Ett av de ImageLockMode värden som anger åtkomstnivån (läs/skriv) för Bitmap.

format
PixelFormat

Ett av de PixelFormat värden som anger dataformatet för Bitmap.

bitmapData
BitmapData

En BitmapData som innehåller information om låsåtgärden.

Returer

En BitmapData som innehåller information om låsåtgärden.

Undantag

PixelFormat värdet är inte ett specifikt bit-per-pixel-värde.

-eller-

Det felaktiga PixelFormat skickas in för en bitmapp.

Åtgärden misslyckades.

Kommentarer

LockBits Använd metoden för att låsa en befintlig bitmapp i systemminnet så att den kan ändras programmatiskt. Du kan ändra färgen på en bild med SetPixel metoden, även om LockBits metoden ger bättre prestanda för storskaliga ändringar.

När du anropar den här metoden bör du använda en medlem i System.Drawing.Imaging.PixelFormat uppräkningen som innehåller ett specifikt BPP-värde (bits per pixel). Om du använder System.Drawing.Imaging.PixelFormat värden, till exempel Indexed och Gdi, utlöser du en System.ArgumentException. Om du skickar det felaktiga pixelformatet för en bitmapp utlöser du också en System.ArgumentException.

Den här versionen av LockBits metoden är avsedd att användas med värdet flagsImageLockMode.UserInputBuffer.

Gäller för