Bitmap.LockBits メソッド

定義

Bitmap をシステム メモリにロックします。Locks a Bitmap into system memory.

オーバーロード

LockBits(Rectangle, ImageLockMode, PixelFormat)

Bitmap をシステム メモリにロックします。Locks a Bitmap into system memory.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Bitmap をシステム メモリにロックします。Locks a Bitmap into system memory.

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

Bitmap のロックする部分を指定する Rectangle 構造体。A Rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode

Bitmap のアクセス レベル (読み取り/書き込み) を指定する ImageLockMode 列挙体。An ImageLockMode enumeration that specifies the access level (read/write) for the Bitmap.

format
PixelFormat

この Bitmap のデータ形式を指定する PixelFormat 列挙体。A PixelFormat enumeration that specifies the data format of this Bitmap.

戻り値

このロック処理に関する情報を格納している BitmapDataA 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.

次のコード例は、PixelFormatHeightWidth、および Scan0 の各プロパティを使用する方法を示しています。LockBits および UnlockBits メソッド@no__t と6つの列挙体があります。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 フォームと共に使用するように設計されています。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. この例を実行するには、フォームに貼り付け、LockUnlockBitsExample メソッドを呼び出して、フォームの @no__t 0 イベントを処理します。 ePaintEventArgs として渡します。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

注釈

@No__t-0 メソッドを使用して、プログラムで変更できるように、システムメモリ内の既存のビットマップをロックします。Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. @No__t-0 の方法でイメージの色を変更できます。ただし、LockBits の方法では、大規模な変更に対してパフォーマンスが向上します。You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

@No__t-0 は、サイズ、ピクセル形式、メモリ内のピクセルデータの開始アドレス、各スキャンライン (ストライド) の長さなど、Bitmap の属性を指定します。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).

このメソッドを呼び出す場合は、特定のピクセルあたりのビット数 (BPP) 値を含む @no__t 0 列挙体のメンバーを使用する必要があります。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. @No__t-1 や Gdi などの System.Drawing.Imaging.PixelFormat の値を使用すると、System.ArgumentException がスローされます。Using System.Drawing.Imaging.PixelFormat values such as Indexed and Gdi will throw an System.ArgumentException. また、ビットマップに正しくないピクセル形式を渡すと、@no__t 0 がスローされます。Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

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

Bitmap のロックする部分を指定する四角形構造体。A rectangle structure that specifies the portion of the Bitmap to lock.

flags
ImageLockMode

Bitmap のアクセス レベル (読み取り/書き込み) を指定する ImageLockMode 値の 1 つ。One of the ImageLockMode values that specifies the access level (read/write) for the Bitmap.

format
PixelFormat

Bitmap のデータ形式を指定する PixelFormat 値の 1 つ。One of the PixelFormat values that specifies the data format of the Bitmap.

bitmapData
BitmapData

ロック処理に関する情報を格納している BitmapDataA BitmapData that contains information about the lock operation.

戻り値

ロック処理に関する情報を格納している BitmapDataA 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.

注釈

@No__t-0 メソッドを使用して、プログラムで変更できるように、システムメモリ内の既存のビットマップをロックします。Use the LockBits method to lock an existing bitmap in system memory so that it can be changed programmatically. @No__t-0 の方法でイメージの色を変更できます。ただし、LockBits の方法では、大規模な変更に対してパフォーマンスが向上します。You can change the color of an image with the SetPixel method, although the LockBits method offers better performance for large-scale changes.

このメソッドを呼び出す場合は、特定のピクセルあたりのビット数 (BPP) 値を含む @no__t 0 列挙体のメンバーを使用する必要があります。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. @No__t-0 の値 (IndexedGdi など) を使用すると、System.ArgumentException がスローされます。Using System.Drawing.Imaging.PixelFormat values, such as Indexed and Gdi, will throw an System.ArgumentException. また、ビットマップに正しくないピクセル形式を渡すと、@no__t 0 がスローされます。Also, passing the incorrect pixel format for a bitmap will throw an System.ArgumentException.

このバージョンの LockBits メソッドは、ImageLockMode.UserInputBufferflags 値と共に使用することを目的としています。This version of the LockBits method is intended to be used with a flags value of ImageLockMode.UserInputBuffer.

適用対象