Bitmap.LockBits Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Блокирует Bitmap память системы.
Перегрузки
| Имя | Описание |
|---|---|
| LockBits(Rectangle, ImageLockMode, PixelFormat) |
Блокирует Bitmap память системы. |
| LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) |
Блокирует Bitmap память системы. |
LockBits(Rectangle, ImageLockMode, PixelFormat)
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
Блокирует Bitmap память системы.
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
Параметры
- flags
- ImageLockMode
Перечисление ImageLockMode , указывающее уровень доступа (чтение и запись) для объекта Bitmap.
- format
- PixelFormat
Перечисление PixelFormat , указывающее формат данных этого Bitmapпараметра.
Возвращаемое значение
Объект, BitmapData содержащий сведения об этой операции блокировки.
Исключения
Значение PixelFormat не является конкретным битом на пиксель.
–или–
PixelFormat Неправильно передается для растрового изображения.
Операция не удалась.
Примеры
В следующем примере кода показано, как использовать PixelFormatHeightWidthсвойства и Scan0 свойства, LockBits а UnlockBits также методы и перечисление.ImageLockMode Этот пример предназначен для использования с Windows Forms. Этот пример не предназначен для правильной работы со всеми форматами пикселей, но для предоставления примера использования LockBits метода. Чтобы запустить этот пример, вставьте его в форму и обработайте событие формы Paint , вызвав LockUnlockBitsExample метод, передав e как 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
Комментарии
LockBits Используйте метод, чтобы заблокировать существующую растровую карту в системной памяти, чтобы ее можно было изменить программным способом. Вы можете изменить цвет изображения с SetPixel помощью метода, хотя LockBits метод обеспечивает более высокую производительность для крупномасштабных изменений.
Указывает BitmapData атрибуты Bitmap, такие как размер, формат пикселя, начальный адрес данных пикселя в памяти и длина каждой строки сканирования (шаг).
При вызове этого метода следует использовать элемент System.Drawing.Imaging.PixelFormat перечисления, который содержит определенное значение битов на пиксель (BPP). Использование System.Drawing.Imaging.PixelFormat таких значенийIndexed, как Gdi и System.ArgumentException вызовет исключение. Кроме того, при передаче неправильного формата пикселя для растрового изображения будет возникать System.ArgumentExceptionисключение.
Применяется к
LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
- Исходный код:
- Bitmap.cs
Блокирует Bitmap память системы.
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
Параметры
- flags
- ImageLockMode
Одно из ImageLockMode значений, указывающее уровень доступа (чтение и запись) для .Bitmap
- format
- PixelFormat
Одно из PixelFormat значений, указывающее формат Bitmapданных.
- bitmapData
- BitmapData
Объект, BitmapData содержащий сведения об операции блокировки.
Возвращаемое значение
Объект, BitmapData содержащий сведения об операции блокировки.
Исключения
PixelFormat значение не является конкретным значением битов на пиксель.
–или–
PixelFormat Неправильно передается для растрового изображения.
Операция не удалась.
Комментарии
LockBits Используйте метод, чтобы заблокировать существующую растровую карту в системной памяти, чтобы ее можно было изменить программным способом. Вы можете изменить цвет изображения с SetPixel помощью метода, хотя LockBits метод обеспечивает более высокую производительность для крупномасштабных изменений.
При вызове этого метода следует использовать элемент System.Drawing.Imaging.PixelFormat перечисления, который содержит определенное значение битов на пиксель (BPP). Использование System.Drawing.Imaging.PixelFormat таких значений, как Indexed и Gdi, вызовет System.ArgumentExceptionисключение. Кроме того, при передаче неправильного формата пикселя для растрового изображения будет возникать System.ArgumentExceptionисключение.
Эта версия LockBits метода предназначена для использования со значением flagsImageLockMode.UserInputBuffer.