Манипулировать фото в сепию - PullRequest
0 голосов
/ 09 февраля 2012

Как мне перевести мою фотографию в сепию после нажатия на кнопку.

Ниже мой код:

private void button1_Click(object sender, RoutedEventArgs e)
{
    BitmapSource image = (BitmapSource)video.Source;
    image.Save(DateTime.Now.ToString("ddMMyyyy HHmmss") + ".jpg", ImageFormat.Jpeg);
    MessageBox.Show("Saved on bin/debug");
}

1 Ответ

0 голосов
/ 10 февраля 2012

Вы можете использовать WriteableBitmap и манипулировать данными в пикселях unsafe, например здесь .

Тогда вы можете использовать

    public static void ToSepia(this WriteableBitmap wrb)
    {
        // ForEach...
        // (...ForEach(this WriteableBitmap bmp, Func<int, int, Color, Color> func)...)
        //
        wrb.ForEach((x, y, c) =>
        {
            // Convert color to grayscale.
            byte grayScale = (byte)((c.R * .3) + (c.G * .59) + (c.B * .11));
            // Init new color with taking same alpha.
            Color newColor = Color.FromArgb(c.A, grayScale, grayScale, grayScale);
            // Apply sepia and return new color.
            return new Color()
            {
                R = (byte)(newColor.R * 1),
                G = (byte)(newColor.G * 0.95),
                B = (byte)(newColor.B * 0.82),
            };
        });
    }

Здесьявляется вспомогательной библиотекой для SL, но недавно также была сделана версия wpf (отметьте ветки в системе контроля версий).http://writeablebitmapex.codeplex.com/

...