In vielen Anwendungen werden Grafiken jeglicher Art angezeigt. Und manches Mal, wollen diese auch manipuliert werden. Die Gründe sind hier manigfaltig. In meinem Fall mussten Fotos sepia-färbig dargestellt werden. Mit Hilfe der Klasse ColorMatrix aus dem Namespace System.Drawing.Imaging (System.Drawing.dll) läßt sich dies in wenigen Sekunden bewerkstelligen.
Doch was genau macht die Klasse ColorMatrix? Hier die treffende Beschreibung aus der MSDN:
Defines a 5 x 5 matrix that contains the coordinates for the RGBA space. Several methods of the ImageAttributes class adjust image colors by using a color matrix.
Anmerkung: A ist der Alpha-Kanal, welcher die Transparenz einer Farbe beschreibt.
Sepia selbst ist nichts anderes, als die Darstellung einer Grafik/eines Bildes in Brauntönen, anstatt in Grau-Schattierungen.
Nachfolgend wird nun die Matrix für unsere Sepia-Darstellung definiert (Nachschlagen, Grafiker fragen, alles ist erlaubt):
Nun muss die Matrix nur mehr verwendet werden. Hier der Code aus dem Button-Click-Event meiner kleinen Demo-Anwendung:
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "JPEG-Files:*.jpg";
ofd.DefaultExt = ".jpg";
ofd.Title = "Open JPG File";
if (ofd.ShowDialog() == DialogResult.OK)
{
if (OriginalPicture.Image != null)
OriginalPicture.Image.Dispose();
if (SepiaPicture.Image != null)
SepiaPicture.Image.Dispose();
Image img1 = Image.FromFile(ofd.FileName);
Image img2 = Image.FromFile(ofd.FileName);
OriginalPicture.Image = img1;
ImageAttributes imageAttrs = new ImageAttributes();
imageAttrs.SetColorMatrix(GetSepiaMatrix());
using (Graphics g = Graphics.FromImage(img2))
{
g.DrawImage(
img2,
new Rectangle(0, 0, img2.Width, img2.Height),
0, 0, img2.Width, img2.Height,
GraphicsUnit.Pixel, imageAttrs);
}
SepiaPicture.Image = img2;
}
Anmerkungen: OriginalPicture und SepiaPicture sind beide vom Typ PictureBox.
Und so kann ein mögliches Ergebnis ausssehen:
PS: Dieses Foto wurde übrigens 2005 von mir in Venedig aufgenommen. Schon eine recht nette Stadt muss ich sagen, wenn es auch ständig nach Fisch riecht ;-)