Bitmap.LockBits Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Sperrt eine Bitmap im Systemspeicher.
Überlädt
LockBits(Rectangle, ImageLockMode, PixelFormat) |
Sperrt eine Bitmap im Systemspeicher. |
LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) |
Sperrt eine Bitmap im Systemspeicher. |
LockBits(Rectangle, ImageLockMode, PixelFormat)
- Quelle:
- Bitmap.cs
- Quelle:
- Bitmap.cs
- Quelle:
- Bitmap.cs
Sperrt eine Bitmap im Systemspeicher.
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
Parameter
- flags
- ImageLockMode
Eine ImageLockMode-Enumeration, die die Zugriffsebene (Lesen/Schreiben) für die Bitmap angibt.
- format
- PixelFormat
Eine PixelFormat-Enumeration, die das Datenformat dieser Bitmap angibt.
Gibt zurück
Ein BitmapData mit den Informationen über den Sperrvorgang.
Ausnahmen
PixelFormat ist kein in Bit pro Pixel angegebener Wert.
- oder -
Für eine Bitmap wurde ein falsches PixelFormat übergeben.
Fehler beim Vorgang.
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie die PixelFormatEigenschaften , Height, Widthund Scan0 , die LockBits Methoden und UnlockBits sowie die ImageLockMode Enumeration verwendet werden. Dieses Beispiel ist für die Verwendung mit Windows Forms konzipiert. Dieses Beispiel ist nicht so konzipiert, dass es ordnungsgemäß mit allen Pixelformaten funktioniert, sondern ein Beispiel für die Verwendung der LockBits -Methode bietet. Um dieses Beispiel auszuführen, fügen Sie es in ein Formular ein, und behandeln Sie das Ereignis des FormularsPaint, indem Sie die LockUnlockBitsExample
-Methode aufrufen und als PaintEventArgsübergebene
.
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
Hinweise
Verwenden Sie die LockBits -Methode, um eine vorhandene Bitmap im Systemspeicher zu sperren, damit sie programmgesteuert geändert werden kann. Sie können die Farbe eines Bilds mit der SetPixel -Methode ändern, obwohl die LockBits -Methode eine bessere Leistung für umfangreiche Änderungen bietet.
Der BitmapData gibt die Attribute von Bitmapan, z. B. Größe, Pixelformat, die Startadresse der Pixeldaten im Arbeitsspeicher und länge jeder Scanzeile (Stride).
Beim Aufrufen dieser Methode sollten Sie ein Member der Enumeration verwenden, das System.Drawing.Imaging.PixelFormat einen bestimmten Bits-per-Pixel -Wert (BPP) enthält. Wenn Sie System.Drawing.Imaging.PixelFormat Werte wie Indexed und Gdi verwenden, wird ein System.ArgumentExceptionausgelöst. Außerdem löst das Übergeben des falschen Pixelformats für eine Bitmap ein aus System.ArgumentException.
Gilt für:
LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)
- Quelle:
- Bitmap.cs
- Quelle:
- Bitmap.cs
- Quelle:
- Bitmap.cs
Sperrt eine Bitmap im Systemspeicher.
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
Parameter
- flags
- ImageLockMode
Einer der ImageLockMode-Werte, der die Zugriffsebene (Lesen/Schreiben) für die Bitmap angibt.
- format
- PixelFormat
Einer der PixelFormat-Werte, der das Datenformat der Bitmap angibt.
- bitmapData
- BitmapData
Ein BitmapData mit den Informationen über den Sperrvorgang.
Gibt zurück
Ein BitmapData mit den Informationen über den Sperrvorgang.
Ausnahmen
Der PixelFormat-Wert ist kein in Bit pro Pixel angegebener Wert.
- oder -
Für eine Bitmap wurde ein falsches PixelFormat übergeben.
Fehler beim Vorgang.
Hinweise
Verwenden Sie die LockBits -Methode, um eine vorhandene Bitmap im Systemspeicher zu sperren, damit sie programmgesteuert geändert werden kann. Sie können die Farbe eines Bilds mit der SetPixel -Methode ändern, obwohl die LockBits -Methode eine bessere Leistung für umfangreiche Änderungen bietet.
Beim Aufrufen dieser Methode sollten Sie ein Member der Enumeration verwenden, das System.Drawing.Imaging.PixelFormat einen bestimmten Bits-per-Pixel -Wert (BPP) enthält. Wenn System.Drawing.Imaging.PixelFormat Sie Werte wie Indexed und Gdiverwenden, wird ein System.ArgumentExceptionausgelöst. Außerdem löst das Übergeben des falschen Pixelformats für eine Bitmap ein aus System.ArgumentException.
Diese Version der LockBits -Methode ist für die Verwendung mit dem flags
Wert vorgesehen ImageLockMode.UserInputBuffer.