.NET Framework クラス ライブラリ
Bitmap.LockBits メソッド (Rectangle, ImageLockMode, PixelFormat)

Bitmap をシステム メモリにロックします。

名前空間: System.Drawing
アセンブリ: System.Drawing (system.drawing.dll 内)

構文

Visual Basic (宣言)
Public Function LockBits ( _
    rect As Rectangle, _
    flags As ImageLockMode, _
    format As PixelFormat _
) As BitmapData
Visual Basic (使用法)
Dim instance As Bitmap
Dim rect As Rectangle
Dim flags As ImageLockMode
Dim format As PixelFormat
Dim returnValue As BitmapData

returnValue = instance.LockBits(rect, flags, format)
C#
public BitmapData LockBits (
    Rectangle rect,
    ImageLockMode flags,
    PixelFormat format
)
C++
public:
BitmapData^ LockBits (
    Rectangle rect, 
    ImageLockMode flags, 
    PixelFormat format
)
J#
public BitmapData LockBits (
    Rectangle rect, 
    ImageLockMode flags, 
    PixelFormat format
)
JScript
public function LockBits (
    rect : Rectangle, 
    flags : ImageLockMode, 
    format : PixelFormat
) : BitmapData

パラメータ

rect

Bitmap のロックする部分を指定する Rectangle 構造体。

flags

Bitmap のアクセス レベル (読み取り/書き込み) を指定する ImageLockMode 列挙体。

format

この Bitmap のデータ形式を指定する PixelFormat 列挙体。

戻り値

このロック処理に関する情報を格納している BitmapData
例外

例外の種類条件

ArgumentException

PixelFormat はピクセルあたりのビット数の特定の値ではありません。

または

ビットマップに対して不正な PixelFormat が渡されました。

Exception

操作に失敗しました。

解説

BitmapData では、サイズ、ピクセル形式、メモリ内におけるピクセル データの開始アドレス、各スキャン ライン (ストライド) の長さなど、Bitmap の属性を指定します。

このメソッドを呼び出す場合は、ピクセルあたりのビット数 (BPP) の特定の値を含む System.Drawing.Imaging.PixelFormat 列挙体のメンバを使用する必要があります。IndexedGdi などの System.Drawing.Imaging.PixelFormat 値を使用すると、System.ArgumentException がスローされます。また、ビットマップの不正なピクセル情報を渡すと、System.ArgumentException がスローされます。

使用例

PixelFormatHeightWidthScan0 の各プロパティ、LockBits メソッドと UnlockBits メソッド、および ImageLockMode 列挙体の使用方法を次のコード例に示します。この例は、Windows フォームでの使用を意図してデザインされています。この例を実行するには、コードをフォームに貼り付け、PaintEventArgse を渡して LockUnlockBitsExample メソッドを呼び出すことで、フォームの Paint イベントを処理します。

Visual Basic
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 = bmp.Width * bmp.Height * 3
    Dim rgbValues(bytes - 1) As Byte

    ' Copy the RGB values into the array.
    System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)

    ' Set every red value to 255.  
    For counter As Integer = 0 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
C#
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.
    // This code is specific to a bitmap with 24 bits per pixels.
    int bytes = bmp.Width * bmp.Height * 3;
    byte[] rgbValues = new byte[bytes];

    // Copy the RGB values into the array.
    System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

    // Set every red value to 255.  
    for (int counter = 0; 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);

}
C++
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 = bmp->Width * bmp->Height * 3;
   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 red value to 255.  
   for ( int counter = 0; 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 );
}
J#
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.get_Width(), bmp.get_Height());
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, 
        System.Drawing.Imaging.ImageLockMode.ReadWrite, 
        bmp.get_PixelFormat());

    // Get the address of the first line.
    IntPtr ptr = bmpData.get_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 = bmp.get_Width() * bmp.get_Height() * 3;
    ubyte rgbValues[] = new ubyte[bytes];

    // Copy the RGB values into the array.
    System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

    // Set every red value to 255.  
    for (int counter = 0; counter < rgbValues.get_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.get_Graphics().DrawImage(bmp, 0, 150);
} //LockUnlockBitsExample
プラットフォーム

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 2.0、1.1、1.0

.NET Compact Framework

サポート対象 : 2.0
参照

タグ :


Page view tracker