Bagikan melalui


Menggunakan Matriks Warna untuk Mengatur Nilai Alfa dalam Gambar

Kelas Bitmap (yang mewarisi dari kelas Gambar) dan kelas ImageAttributes menyediakan fungsionalitas untuk mendapatkan dan mengatur nilai piksel. Anda dapat menggunakan kelas ImageAttributes untuk memodifikasi nilai alfa untuk seluruh gambar, atau Anda dapat memanggil metode Bitmap::SetPixel kelas bitmap untuk memodifikasi nilai piksel individual. Untuk informasi selengkapnya tentang mengatur nilai piksel individual, lihat Mengatur Nilai Alfa Piksel Individual.

Contoh berikut menggambar garis hitam lebar lalu menampilkan gambar buram yang mencakup bagian dari garis tersebut.

Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw an image that covers part of the black line.
graphics.DrawImage(&bitmap,
   Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));

Ilustrasi berikut menunjukkan gambar hasilnya, yang digambar pada titik (30, 0). Perhatikan bahwa garis hitam lebar tidak ditampilkan melalui gambar.

ilustrasi yang menunjukkan gambar buram yang tumpang tindih dengan persegi panjang hitam yang tipis dan lebar

Kelas ImageAttributes memiliki banyak properti yang dapat Anda gunakan untuk memodifikasi gambar selama penyajian. Dalam contoh berikut, objek ImageAttributes digunakan untuk mengatur semua nilai alfa menjadi 80 persen dari nilai aslinya. Ini dilakukan dengan menginisialisasi matriks warna dan mengatur nilai penskalaan alfa dalam matriks menjadi 0,8. Alamat matriks warna diteruskan ke metode ImageAttributes::SetColorMatrix dari objek ImageAttributes, dan alamat objek ImageAttributes diteruskan ke metode DrawImage objek Graphics.

// Create a Bitmap object and load it with the texture image.
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// Initialize the color matrix.
// Notice the value 0.8 in row 4, column 4.
ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt;
imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw the semitransparent bitmap image.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
graphics.DrawImage(
   &bitmap, 
   Rect(30, 0, iWidth, iHeight),  // Destination rectangle
   0,                             // Source rectangle X 
   0,                             // Source rectangle Y
   iWidth,                        // Source rectangle width
   iHeight,                       // Source rectangle height
   UnitPixel, 
   &imageAtt);

Selama penyajian, nilai alfa dalam bitmap dikonversi menjadi 80 persen dari nilai awalnya. Ini menghasilkan gambar yang dipadukan dengan latar belakang. Seperti yang ditunjukkan oleh ilustrasi berikut, gambar bitmap terlihat transparan; Anda dapat melihat garis hitam padat melaluinya.

ilustrasi yang mirip dengan yang sebelumnya, tetapi gambarnya setengah transparan

Pada bagian gambar yang berada di atas latar belakang berwarna putih, gambar tersebut telah dicampur dengan warna putih. Ketika gambar melewati garis hitam, gambar dipadukan dengan warna hitam.