Bagikan melalui


Penyesuaian Warna

Transformasi penskalaan mengalikan satu atau beberapa dari empat komponen warna dengan angka. Entri matriks warna yang mewakili penskalakan diberikan dalam tabel berikut.

Komponen yang akan diskalakan Entri matriks
Merah [0][0]
Hijau [1][1]
Biru [2][2]
Alpha [3][3]

 

Contoh berikut membuat Gambar objek dari file ColorBars2.bmp. Kemudian kode menskalakan komponen biru dari setiap piksel dalam gambar dengan faktor 2. Gambar asli digambar bersama gambar yang diubah.

Image            image(L"ColorBars2.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

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, 2.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};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

Ilustrasi berikut menunjukkan gambar asli di sebelah kiri dan gambar berskala di sebelah kanan.

Memperlihatkan empat bilah berwarna, lalu bilah yang sama dengan warna yang berbeda.

Tabel berikut ini memperlihatkan vektor warna untuk empat bilah sebelum dan sesudah penskalaan biru. Perhatikan bahwa komponen biru di bilah warna keempat berubah dari 0,8 menjadi 0,6. Itu karena GDI+ hanya mempertahankan bagian pecahan dari hasil. Misalnya, (2)(0,8) = 1,6, dan bagian pecahan 1,6 adalah 0,6. Hanya mempertahankan bagian pecahan memastikan bahwa hasilnya selalu dalam interval [0, 1].

Asli Skala
(0.4, 0.4, 0.4, 1) (0.4, 0.4, 0.8, 1)
(0.4, 0.2, 0.2, 1) (0.4, 0.2, 0.4, 1)
(0.2, 0.4, 0.2, 1) (0.2, 0.4, 0.4, 1)
(0.4, 0.4, 0.8, 1) (0.4, 0.4, 0.6, 1)

 

Contoh berikut membuat objek Gambar dari file ColorBars2.bmp. Kemudian kode menskalakan komponen merah, hijau, dan biru dari setiap piksel dalam gambar. Komponen merah diskalakan turun 25 persen, komponen hijau diturunkan skalanya 35 persen, dan komponen biru diskalakan turun 50 persen.

Image            image(L"ColorBars.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

ColorMatrix colorMatrix = {
   0.75f, 0.0f,  0.0f, 0.0f, 0.0f,
   0.0f,  0.65f, 0.0f, 0.0f, 0.0f,
   0.0f,  0.0f,  0.5f, 0.0f, 0.0f,
   0.0f,  0.0f,  0.0f, 1.0f, 0.0f,
   0.0f,  0.0f,  0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

Ilustrasi berikut menunjukkan gambar asli di sebelah kiri dan gambar berskala di sebelah kanan.

ilustrasi memperlihatkan empat bilah berwarna, lalu bilah tersebut dengan warna yang berbeda

Tabel berikut ini memperlihatkan vektor warna untuk empat bilah sebelum dan sesudah penskalaan merah, hijau, dan biru.

Asli Skala
(0.6, 0.6, 0.6, 1) (0.45, 0.39, 0.3, 1)
(0, 1, 1, 1) (0, 0.65, 0.5, 1)
(1, 1, 0, 1) (0.75, 0.65, 0, 1)
(1, 0, 1, 1) (0.75, 0, 0.5, 1)