Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een schaaltransformatie vermenigvuldigt een of meer van de vier kleuronderdelen met een getal. De kleurmatrixvermeldingen die schalen vertegenwoordigen, worden gegeven in de volgende tabel.
| Onderdeel dat geschaald moet worden | Matrixinvoer |
|---|---|
| Rood | [0][0] |
| Groen | [1][1] |
| Blauw | [2][2] |
| Alfa | [3][3] |
Eén kleur schalen
In het volgende voorbeeld wordt een Image-object samengesteld uit het bestand ColorBars2.bmp. Vervolgens wordt met de code het blauwe onderdeel van elke pixel in de afbeelding geschaald met een factor van 2. De oorspronkelijke afbeelding wordt getekend naast de getransformeerde afbeelding.
Image image = new Bitmap("ColorBars2.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, 0, 2, 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 As New Bitmap("ColorBars2.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, 0, 2, 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)
' Pass in the destination rectangle (2nd argument), the upper-left corner
' (3rd and 4th arguments), width (5th argument), and height (6th
' argument) of the source rectangle.
e.Graphics.DrawImage( _
image, _
New Rectangle(150, 10, width, height), _
0, 0, _
width, _
height, _
GraphicsUnit.Pixel, _
imageAttributes)
In de volgende afbeelding ziet u de oorspronkelijke afbeelding aan de linkerkant en de geschaalde afbeelding aan de rechterkant:
De volgende tabel bevat de kleurvectoren voor de vier balken vóór en na de blauwe schaalaanpassing. Houd er rekening mee dat het blauwe onderdeel in de vierde kleurenbalk is gegaan van 0,8 tot 0,6. Dat komt doordat GDI+ alleen het breukdeel van het resultaat behoudt. Bijvoorbeeld: (2)(0,8) = 1,6 en het breukdeel van 1,6 is 0,6. Door alleen het breukdeel te behouden, zorgt u ervoor dat het resultaat altijd binnen het interval [0, 1] valt.
| Originele Tekst | Geschaald |
|---|---|
| (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) |
Het schalen van meerdere kleuren
In het volgende voorbeeld wordt een Image-object samengesteld uit het bestand ColorBars2.bmp. Vervolgens worden de rode, groene en blauwe onderdelen van elke pixel in de afbeelding geschaald. De rode onderdelen worden 25 procent omlaag geschaald, de groene onderdelen worden 35 procent omlaag geschaald en de blauwe onderdelen worden 50 procent omlaag geschaald.
Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
float[][] colorMatrixElements = {
new float[] {.75F, 0, 0, 0, 0},
new float[] {0, .65F, 0, 0, 0},
new float[] {0, 0, .5F, 0, 0},
new float[] {0, 0, 0, 1F, 0},
new float[] {0, 0, 0, 0, 1F}};
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 As 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() {0.75F, 0, 0, 0, 0}, _
New Single() {0, 0.65F, 0, 0, 0}, _
New Single() {0, 0, 0.5F, 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)
' Pass in the destination rectangle, and the upper-left corner, width,
' and height of the source rectangle as in the previous example.
e.Graphics.DrawImage( _
image, _
New Rectangle(150, 10, width, height), _
0, 0, _
width, _
height, _
GraphicsUnit.Pixel, _
imageAttributes)
In de volgende afbeelding ziet u de oorspronkelijke afbeelding aan de linkerkant en de geschaalde afbeelding aan de rechterkant:
De volgende tabel bevat de kleurvectoren voor de vier balken vóór en na de rode, groene en blauwe schaalaanpassing.
| Originele Tekst | Geschaald |
|---|---|
| (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) |
Zie ook
.NET Desktop feedback