Поделиться через


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

Параметры

rect
Rectangle

Структура Rectangle, которая задает часть объекта Bitmap для блокировки.

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

Параметры

rect
Rectangle

Структура прямоугольника, задающая часть объекта Bitmap для блокировки.

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.

Применяется к