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.
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.
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) |