Bitmap.LockBits Bitmap.LockBits Bitmap.LockBits Bitmap.LockBits Method

Определение

Блокирует объект Bitmap в оперативной памяти.Locks a Bitmap into system memory.

Перегрузки

LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat)

Блокирует объект Bitmap в системной памяти.Locks a Bitmap into system memory.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Блокирует объект Bitmap в оперативной памяти.Locks a Bitmap into system memory

LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat) LockBits(Rectangle, ImageLockMode, PixelFormat)

Блокирует объект Bitmap в системной памяти.Locks a Bitmap into system memory.

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 Rectangle Rectangle

Структура Rectangle, которая задает часть объекта Bitmap для блокировки.A Rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode ImageLockMode ImageLockMode ImageLockMode

Перечисление ImageLockMode, задающее уровень доступа (чтение или запись) для объекта Bitmap.An ImageLockMode enumeration that specifies the access level (read/write) for the Bitmap.

format
PixelFormat PixelFormat PixelFormat PixelFormat

Перечисление PixelFormat, задающее формат данных этого изображения Bitmap.A PixelFormat enumeration that specifies the data format of this Bitmap.

Возвраты

Объект BitmapData, содержащий сведения об этой операции блокирования.A BitmapData that contains information about this lock operation.

Исключения

Значение PixelFormat не является конкретным числом битов на пиксель.The PixelFormat is not a specific bits-per-pixel value.

-или--or- Для точечного рисунка передан неверный формат PixelFormat.The incorrect PixelFormat is passed in for a bitmap.

Операция выполнена со сбоем.The operation failed.

Примеры

В следующем примере кода демонстрируется использование PixelFormat, Height, Width, и Scan0 свойства; LockBits и UnlockBits методов; и ImageLockMode перечисления.The following code example demonstrates how to use the PixelFormat, Height, Width, and Scan0 properties; the LockBits and UnlockBits methods; and the ImageLockMode enumeration. Этот пример предназначен для использования с Windows Forms.This example is designed to be used with Windows Forms. Этот пример не предназначен для правильной работы со всеми форматами пикселей, но пример демонстрирует использование LockBits метод.This example is not designed to work correctly with all pixel formats, but to provide an example of how to use the LockBits method. Чтобы выполнить этот пример, вставьте его в форму и обработки формы Paint событие путем вызова LockUnlockBitsExample , передавая e как PaintEventArgs.To run this example, paste it into a form and handle the form's Paint event by calling the LockUnlockBitsExample method, passing e as 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 метод, чтобы заблокировать существующего точечного рисунка в системной памяти, таким образом, чтобы его можно изменить программным способом.Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. Можно изменить цвет в изображения с SetPixel метод, несмотря на то что LockBits метод обеспечивает более высокую производительность для крупномасштабных изменения.You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

BitmapData Указывает атрибуты Bitmap, такие как размер, формат пикселей, начальный адрес в памяти данные о пикселях, а длина каждой строки (stride).The BitmapData specifies the attributes of the Bitmap, such as size, pixel format, the starting address of the pixel data in memory, and length of each scan line (stride).

При вызове этого метода, следует использовать членом System.Drawing.Imaging.PixelFormat перечисление, содержащее значение конкретного битов на пиксель (BPP).When calling this method, you should use a member of the System.Drawing.Imaging.PixelFormat enumeration that contains a specific bits-per-pixel (BPP) value. С помощью System.Drawing.Imaging.PixelFormat значения, такие как Indexed и Gdi вызовет System.ArgumentException.Using System.Drawing.Imaging.PixelFormat values such as Indexed and Gdi will throw an System.ArgumentException. Кроме того, передача неправильного формата пикселей для точечного рисунка вызовет System.ArgumentException.Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData) LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Блокирует объект Bitmap в оперативной памяти.Locks a Bitmap into system memory

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

Параметры

rect
Rectangle Rectangle Rectangle Rectangle

Структура прямоугольника, задающая часть объекта Bitmap для блокировки.A rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode ImageLockMode ImageLockMode ImageLockMode

Одно из значений ImageLockMode, задающее уровень доступа (чтение или запись) для объекта Bitmap.One of the ImageLockMode values that specifies the access level (read/write) for the Bitmap.

format
PixelFormat PixelFormat PixelFormat PixelFormat

Одно из значений PixelFormat, задающее формат данных объекта Bitmap.One of the PixelFormat values that specifies the data format of the Bitmap.

bitmapData
BitmapData BitmapData BitmapData BitmapData

Объект BitmapData, содержащий сведения об этой операции блокирования.A BitmapData that contains information about the lock operation.

Возвраты

Объект BitmapData, содержащий сведения об этой операции блокирования.A BitmapData that contains information about the lock operation.

Исключения

Значение PixelFormat не является конкретным числом битов на пиксель.PixelFormat value is not a specific bits-per-pixel value.

-или--or- Для точечного рисунка передан неверный формат PixelFormat.The incorrect PixelFormat is passed in for a bitmap.

Операция выполнена со сбоем.The operation failed.

Комментарии

Используйте LockBits метод, чтобы заблокировать существующего точечного рисунка в системной памяти, таким образом, чтобы его можно изменить программным способом.Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. Можно изменить цвет в изображения с SetPixel метод, несмотря на то что LockBits метод обеспечивает более высокую производительность для крупномасштабных изменения.You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

При вызове этого метода, следует использовать членом System.Drawing.Imaging.PixelFormat перечисление, содержащее значение конкретного битов на пиксель (BPP).When calling this method, you should use a member of the System.Drawing.Imaging.PixelFormat enumeration that contains a specific bits-per-pixel (BPP) value. С помощью System.Drawing.Imaging.PixelFormat значения, такие как Indexed и Gdi, вызовет System.ArgumentException.Using System.Drawing.Imaging.PixelFormat values, such as Indexed and Gdi, will throw an System.ArgumentException. Кроме того, передача неправильного формата пикселей для точечного рисунка вызовет System.ArgumentException.Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

Эта версия LockBits метод предназначен для использования с flags значение ImageLockMode.UserInputBuffer.This version of the LockBits method is intended to be used with a flags value of ImageLockMode.UserInputBuffer.

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