Procedura: variare le componenti cromatiche
L'aringa aumenta o diminuisce un componente di colore in base a una quantità proporzionale a un altro componente del colore. Si consideri, ad esempio, la trasformazione in cui il componente rosso viene aumentato di una metà del valore del componente blu. In una trasformazione di questo tipo, il colore (0,2, 0,5, 1) diventerà (0,7, 0,5, 1). Il nuovo componente rosso è 0,2 + (1/2)(1) = 0,7.
Esempio
Nell'esempio seguente viene creato un Image oggetto dal file ColorBars4.bmp. Il codice applica quindi la trasformazione shearing descritta nel paragrafo precedente a ogni pixel nell'immagine.
La figura seguente mostra l'immagine originale a sinistra e l'immagine a destra:
Nella tabella seguente sono elencati i vettori di colore per le quattro barre prima e dopo la trasformazione shearing.
Originale | Tosato |
---|---|
(0, 0, 1, 1) | (0.5, 0, 1, 1) |
(0.5, 1, 0.5, 1) | (0.75, 1, 0.5, 1) |
(1, 1, 0, 1) | (1, 1, 0, 1) |
(0.4, 0.4, 0.4, 1) | (0.6, 0.4, 0.4, 1) |
Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0.5f, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
e.Graphics.DrawImage(image, 10, 10, width, height);
e.Graphics.DrawImage(
image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);
Dim image = New Bitmap("ColorBars.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim colorMatrixElements As Single()() = _
{New Single() {1, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0.5F, 0, 1, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}}
Dim colorMatrix As New ColorMatrix(colorMatrixElements)
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, _
ColorAdjustType.Bitmap)
e.Graphics.DrawImage(image, 10, 10, width, height)
e.Graphics.DrawImage(image, New Rectangle(150, 10, width, height), 0, 0, _
width, height, GraphicsUnit.Pixel, imageAttributes)
Compilazione del codice
L'esempio precedente è progettato per l'uso con Windows Form e richiede PaintEventArgse
, un parametro del gestore eventi Paint. Sostituire ColorBars.bmp
con un nome e un percorso di immagine validi nel sistema.
Vedi anche
.NET Desktop feedback
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per