Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Questa operazione consiste nell'aumentare o diminuire una componente cromatica in modo proporzionale a un'altra. Si consideri ad esempio una trasformazione in cui la componente rossa viene aumentata della metà del valore di quella blu. Applicando tale trasformazione il colore (0,2, 0,5, 1) diventa (0,7, 0,5, 1). La nuova componente rossa è 0,2 + (1/2)(1) = 0,7.
Esempio
Nell'esempio riportato di seguito viene costruito un oggetto Image dal file ColorBars4.bmp. La trasformazione per variazione descritta nel paragrafo precedente viene quindi applicata a ciascuno dei pixel nell'immagine.
Nell'illustrazione che segue si mostra l'immagine originale a sinistra e l'immagine tagliata a destra.
.png)
Nella tabella che segue sono elencati i vettori di colore per le quattro barre prima e dopo la trasformazione per variazione.
Originale |
Variato |
|---|---|
(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) |
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)
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);
Compilazione del codice
L'esempio riportato in precedenza è stato creato per essere utilizzato con Windows Form e richiede PaintEventArgse, un parametro del gestore eventi Paint. Sostituire ColorBars.bmp con il nome e il percorso di un'immagine validi nel computer in uso.