【问题标题】:Manipulate photo to sepia将照片处理为棕褐色
【发布时间】:2012-02-09 16:37:31
【问题描述】:

点击按钮后如何将照片处理为棕褐色。

下面是我的代码:

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");
}

【问题讨论】:

  • 您可以使用着色器轻松做到这一点:Shader library
  • 我想使用该按钮捕捉具有棕褐色效果的照片并将其保存到该位置。我应该添加什么?
  • Apple Sepia 着色器从库到照片
  • 我正在使用 kinect 相机进行拍摄。我不知道要在 xaml.cs 中放什么,保存时或单击按钮后照片将显示为棕褐色。我只能在 xaml 中使用着色器。
  • 抱歉错字。不,你可以在后面的代码中做到这一点。您可以在 XAML 中执行的任何操作都可以在 Code-Behind 中执行。在代码中创建效果并将效果应用于图像

标签: wpf kinect bitmapsource


【解决方案1】:

您可以使用WriteableBitmap 并以unsafe 的方式操作其像素数据,例如here

然后就可以使用了

    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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2021-03-28
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多