Sdílet prostřednictvím


Bitmap.LockBits Metoda

Definice

Uzamkne do Bitmap systémové paměti.

Přetížení

LockBits(Rectangle, ImageLockMode, PixelFormat)

Uzamkne do Bitmap systémové paměti.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Uzamkne do Bitmap systémové paměti.

LockBits(Rectangle, ImageLockMode, PixelFormat)

Zdroj:
Bitmap.cs
Zdroj:
Bitmap.cs
Zdroj:
Bitmap.cs

Uzamkne do Bitmap systémové paměti.

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

Parametry

rect
Rectangle

Struktura Rectangle , která určuje část uzamčení Bitmap .

flags
ImageLockMode

Výčet ImageLockMode , který určuje úroveň přístupu (čtení/zápis) pro Bitmap.

format
PixelFormat

Výčet PixelFormat , který určuje formát dat tohoto Bitmap.

Návraty

A BitmapData , který obsahuje informace o této operaci uzamčení.

Výjimky

Hodnota PixelFormat není konkrétní hodnota bitů na pixel.

-nebo-

Pro rastrový obrázek je předána nesprávná PixelFormat hodnota.

Operace se nezdařila.

Příklady

Následující příklad kódu ukazuje, jak používat PixelFormatvlastnosti , HeightWidth, a Scan0 , LockBits metody a UnlockBits a ImageLockMode výčet. Tento příklad je navržený pro použití s model Windows Forms. Tento příklad není navržen tak, aby správně fungoval se všemi formáty pixelů, ale poskytuje příklad použití LockBits metody . Tento příklad spustíte tak, že ho vložíte do formuláře a zpracujete Paint událost formuláře zavoláním LockUnlockBitsExample metody a předáním e jako 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

Poznámky

Použijte metodu LockBits k uzamčení existujícího rastrového obrázku v systémové paměti, aby ji bylo možné programově změnit. Pomocí metody můžete změnit barvu obrázku SetPixel , i když tato LockBits metoda nabízí lepší výkon při rozsáhlých změnách.

Určuje BitmapData atributy objektu Bitmap, například velikost, formát pixelu, počáteční adresu dat pixelů v paměti a délku každého řádku skenování (krok).

Při volání této metody byste měli použít člen výčtu System.Drawing.Imaging.PixelFormat , který obsahuje konkrétní hodnotu bitů na pixel (BPP). Použití System.Drawing.Imaging.PixelFormat hodnot, jako Indexed jsou aGdi, vyvolá .System.ArgumentException Předání nesprávného formátu pixelů pro rastrový obrázek také vyvolá System.ArgumentException.

Platí pro

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Zdroj:
Bitmap.cs
Zdroj:
Bitmap.cs
Zdroj:
Bitmap.cs

Uzamkne do Bitmap systémové paměti.

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

Parametry

rect
Rectangle

Obdélníková struktura, která určuje část objektu, který Bitmap se má uzamknout.

flags
ImageLockMode

Jedna z ImageLockMode hodnot, která určuje úroveň přístupu (čtení/zápis) pro Bitmap.

format
PixelFormat

Jedna z PixelFormat hodnot, která určuje formát dat .Bitmap

bitmapData
BitmapData

A BitmapData , který obsahuje informace o operaci uzamčení.

Návraty

A BitmapData , který obsahuje informace o operaci uzamčení.

Výjimky

PixelFormat value není konkrétní hodnota bitů na pixel.

-nebo-

Pro rastrový obrázek je předána nesprávná PixelFormat hodnota.

Operace se nezdařila.

Poznámky

Použijte metodu LockBits k uzamčení existujícího rastrového obrázku v systémové paměti, aby ji bylo možné programově změnit. Pomocí metody můžete změnit barvu obrázku SetPixel , i když tato LockBits metoda nabízí lepší výkon při rozsáhlých změnách.

Při volání této metody byste měli použít člen výčtu System.Drawing.Imaging.PixelFormat , který obsahuje konkrétní hodnotu bitů na pixel (BPP). Při použití System.Drawing.Imaging.PixelFormat hodnot, jako Indexed jsou a Gdi, dojde k vyvolání System.ArgumentException. Předání nesprávného formátu pixelů pro rastrový obrázek také vyvolá System.ArgumentException.

Tato verze LockBits metody je určena k použití s flags hodnotou ImageLockMode.UserInputBuffer.

Platí pro