WPF 图片灰度处理

本文介绍了如何在WPF应用中通过XAML样式将所有Image控件的图片转换为灰度效果。引用了微软中文技术论坛上的讨论,提供了两种不同的XAML实现方式,一种是直接在Image元素中设置,另一种是定义Style应用于所有Image控件。
摘要由CSDN通过智能技术生成

文章的内容是来自微软中文技术论坛的一个帖子,当时是想将一段将图片灰度处理的代码转换为XAML的一个样式,在这里要谢谢


Xiao Yan Qiang
Sheldon _Xiao、shixin 的热情回答,现在将他们的回答贴出来供大家学习参考.内容如下:

 

提问: 这个功能如何写成一个样式,将一个窗体内所有的Image控件的图片格式都转换为Gray8


BitmapImage bitmapImage = new BitmapImage(newUri("D:\\Face.jpg"));    

FormatConvertedBitmap newFormatedBitmapSource =new FormatConvertedBitmap();    
newFormatedBitmapSource.BeginInit();     
newFormatedBitmapSource.Source = bitmapImage;     
newFormatedBitmapSource.DestinationFormat = PixelFormats.Gray8;    
newFormatedBitmapSource.EndInit();     

img.Source = newFormatedBitmapSource;     
this.Content = img; 

 

Xiao Yan Qiang的回答:

 


public class ImageAttached
{
    // Gray8附加属性,Gary8图片样式的"开关"    public static readonly DependencyProperty Gray8Property =
        DependencyProperty.RegisterAttached("Gray8", typeof(bool), typeof(ImageAttached),
            new FrameworkPropertyMetadata((bool)false,
                new PropertyChangedCallback(OnGray8Changed)));

    public static bool GetGray8(DependencyObject d)
    {
        return (bool)d.GetValue(Gray8Property);
    }

    public static void SetGray8(DependencyObject d, bool value)
    {
        d.SetValue(Gray8Property, value);
    }

    private static void OnGray8Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        Image currentImage = d as Image;
        if (currentImage == null)
        {
            return;
        }

        bool isGray8 = (bool)d.GetValue(Gray8Property);

        if (isGray8)
        {
            // 附加BitmapSourceBackup属性,备份当前BitmapSource,以备恢复用          
            BitmapSource backupBitmapSource = (currentImage.Source as BitmapSource).CloneCurrentValue();
            d.SetValue(BitmapSourceBackupPro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值