Bitmap.LockBits Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Uzamkne systémovou Bitmap paměť.
Přetížení
| Name | Description |
|---|---|
| LockBits(Rectangle, ImageLockMode, PixelFormat) |
Uzamkne systémovou Bitmap paměť. |
| LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) |
Uzamkne systémovou Bitmap paměť. |
LockBits(Rectangle, ImageLockMode, PixelFormat)
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
Uzamkne systémovou Bitmap paměť.
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
- flags
- ImageLockMode
VýčetImageLockMode, 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
Nejedná se PixelFormat o konkrétní bity na pixelovou hodnotu.
nebo
Pro rastrový obrázek se předá nesprávná odpověď PixelFormat .
Operace se nezdařila.
Příklady
Následující příklad kódu ukazuje použití PixelFormat, , HeightWidth, a Scan0 vlastnosti; LockBits a UnlockBits metody; a výčtuImageLockMode. Tento příklad je navržený tak, aby se používal 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. Pokud chcete tento příklad spustit, vložte ho do formuláře a zpracujte událost formuláře Paint volá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í bitmapy v systémové paměti, aby bylo možné ji změnit programově. Pomocí metody můžete změnit barvu obrázku SetPixel , i když LockBits tato metoda nabízí lepší výkon pro rozsáhlé změny.
Určuje BitmapData atributy Bitmap, jako je velikost, formát pixelu, počáteční adresa pixelových dat v paměti a délka každého řádku skenování (stride).
Při volání této metody byste měli použít člen výčtu System.Drawing.Imaging.PixelFormat , který obsahuje konkrétní bity na pixel (BPP). Použití System.Drawing.Imaging.PixelFormat hodnot, například Indexed a Gdi vyvolá výjimku System.ArgumentException. Předání nesprávného formátu pixelů rastrového obrázku vyvolá také .System.ArgumentException
Platí pro
LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
- Zdroj:
- Bitmap.cs
Uzamkne systémovou Bitmap paměť.
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
- flags
- ImageLockMode
Jedna z ImageLockMode hodnot, které určují úroveň přístupu (čtení/zápis) pro danou Bitmaphodnotu .
- format
- PixelFormat
Jedna z PixelFormat hodnot, která určuje formát Bitmapdat .
- 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 hodnota není specifická hodnota bitů na pixel.
nebo
Pro rastrový obrázek se předá nesprávná odpověď PixelFormat .
Operace se nezdařila.
Poznámky
Použijte metodu LockBits k uzamčení existující bitmapy v systémové paměti, aby bylo možné ji změnit programově. Pomocí metody můžete změnit barvu obrázku SetPixel , i když LockBits tato metoda nabízí lepší výkon pro rozsáhlé změny.
Při volání této metody byste měli použít člen výčtu System.Drawing.Imaging.PixelFormat , který obsahuje konkrétní bity na pixel (BPP). Použití System.Drawing.Imaging.PixelFormat hodnot, například Indexed a Gdi, vyvolá výjimku System.ArgumentException. Předání nesprávného formátu pixelů rastrového obrázku vyvolá také .System.ArgumentException
Tato verze LockBits metody je určena k použití s flags hodnotou ImageLockMode.UserInputBuffer.