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

Параметры

rect
Rectangle

Структура Rectangle , указывающая часть Bitmap блокировки.

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

Параметры

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.

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