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 в системной памяти.
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.
Операция не удалась.
Примеры
В следующем примере кода показано, как использовать PixelFormatсвойства , Height, Widthи 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 в системной памяти.
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 метода предназначена для использования со значением flags
ImageLockMode.UserInputBuffer.