Bagikan melalui


Bitmap.LockBits Metode

Definisi

Bitmap Mengunci ke dalam memori sistem.

Overload

LockBits(Rectangle, ImageLockMode, PixelFormat)

Bitmap Mengunci ke dalam memori sistem.

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Bitmap Mengunci ke dalam memori sistem.

LockBits(Rectangle, ImageLockMode, PixelFormat)

Sumber:
Bitmap.cs
Sumber:
Bitmap.cs
Sumber:
Bitmap.cs

Bitmap Mengunci ke dalam memori sistem.

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

Parameter

rect
Rectangle

Rectangle Struktur yang menentukan bagian yang akan dikunciBitmap.

flags
ImageLockMode

ImageLockMode Enumerasi yang menentukan tingkat akses (baca/tulis) untuk Bitmap.

format
PixelFormat

PixelFormat Enumerasi yang menentukan format data ini Bitmap.

Mengembalikan

yang BitmapData berisi informasi tentang operasi penguncian ini.

Pengecualian

PixelFormat bukan nilai bit per piksel tertentu.

-atau-

Yang salah PixelFormat diteruskan untuk bitmap.

Operasi gagal.

Contoh

Contoh kode berikut menunjukkan cara menggunakan PixelFormatproperti , , Height, Widthdan Scan0 ; LockBits metode dan UnlockBits ; dan ImageLockMode enumerasi. Contoh ini dirancang untuk digunakan dengan Formulir Windows. Contoh ini tidak dirancang untuk bekerja dengan benar dengan semua format piksel, tetapi untuk memberikan contoh cara menggunakan metode .LockBits Untuk menjalankan contoh ini, tempelkan ke dalam formulir dan tangani peristiwa formulir Paint dengan memanggil LockUnlockBitsExample metode , meneruskannya e sebagai 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

Keterangan

LockBits Gunakan metode untuk mengunci bitmap yang ada dalam memori sistem sehingga dapat diubah secara terprogram. Anda dapat mengubah warna gambar dengan SetPixel metode , meskipun metode ini LockBits menawarkan performa yang lebih baik untuk perubahan skala besar.

BitmapData menentukan atribut , Bitmapseperti ukuran, format piksel, alamat awal data piksel dalam memori, dan panjang setiap baris pemindaian (stride).

Saat memanggil metode ini, Anda harus menggunakan anggota System.Drawing.Imaging.PixelFormat enumerasi yang berisi nilai bit per piksel (BPP) tertentu. Menggunakan System.Drawing.Imaging.PixelFormat nilai seperti Indexed dan Gdi akan melemparkan System.ArgumentException. Selain itu, meneruskan format piksel yang salah untuk bitmap akan melemparkan System.ArgumentException.

Berlaku untuk

LockBits(Rectangle, ImageLockMode, PixelFormat, BitmapData)

Sumber:
Bitmap.cs
Sumber:
Bitmap.cs
Sumber:
Bitmap.cs

Bitmap Mengunci ke dalam memori sistem.

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

Parameter

rect
Rectangle

Struktur persegi panjang yang menentukan bagian yang akan dikunci Bitmap .

flags
ImageLockMode

Salah ImageLockMode satu nilai yang menentukan tingkat akses (baca/tulis) untuk Bitmap.

format
PixelFormat

Salah PixelFormat satu nilai yang menentukan format data .Bitmap

bitmapData
BitmapData

yang BitmapData berisi informasi tentang operasi penguncian.

Mengembalikan

yang BitmapData berisi informasi tentang operasi penguncian.

Pengecualian

PixelFormat nilai bukan nilai bit per piksel tertentu.

-atau-

Yang salah PixelFormat diteruskan untuk bitmap.

Operasi gagal.

Keterangan

LockBits Gunakan metode untuk mengunci bitmap yang ada dalam memori sistem sehingga dapat diubah secara terprogram. Anda dapat mengubah warna gambar dengan SetPixel metode , meskipun metode ini LockBits menawarkan performa yang lebih baik untuk perubahan skala besar.

Saat memanggil metode ini, Anda harus menggunakan anggota System.Drawing.Imaging.PixelFormat enumerasi yang berisi nilai bit per piksel (BPP) tertentu. Menggunakan System.Drawing.Imaging.PixelFormat nilai, seperti Indexed dan Gdi, akan melempar System.ArgumentException. Selain itu, meneruskan format piksel yang salah untuk bitmap akan melemparkan System.ArgumentException.

Versi LockBits metode ini dimaksudkan untuk digunakan dengan flags nilai ImageLockMode.UserInputBuffer.

Berlaku untuk