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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一个基于Windows操作系统的用户界面框架,可以创建丰富的基于Windows的桌面应用程序。WriteableBitmap是WPF中的一个类,可用于在内存中创建可写入和可读取的位图,并对其进行像素级别的操作。 利用WriteableBitmap处理图片流视频是一种比较常见的技术,原理是将视频的每一帧作为位图读入内存中,利用WriteableBitmap的API对每一帧进行处理(如添加滤镜、旋转、缩放等),然后将处理后的位图显示在屏幕上。这种处理方式具有如下几个优点: 1.资源占用低:尤其对于较长的视频来说,只有当前帧的位图会被读入内存,不会占用过多内存资源。 2.实时性强:由于每一帧的位图都会被即时读取和处理,因此可以达到实时展示视频的效果。 3.可定制性高:利用WriteableBitmap的API,可以自由地对视频进行各种处理和操作,满足不同需求。 但是,利用WriteableBitmap处理图片流视频也存在一些问题,如: 1.兼容性较差:WriteableBitmap只支持在WPF中使用,如果需要在其他平台或语言中实现类似功能,需要寻找其他的解决方案。 2.对处理能力要求较高:由于每一帧都需要实时处理,因此对计算能力和内存需求都有一定的要求。 总的来说,利用WriteableBitmap进行图片流视频处理是一种优秀的解决方案,可以达到良好的效果,但需要视具体情况而定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值