WPF图像处理之像素操作

文章目录

WPF Image控件的初步使用

框架准备

为了演示C#中的图像处理功能,先在xaml中导入一张图片,并且预留出一个WrapPanel,用于存放操作按钮。

xml 复制代码
<TabControl TabStripPlacement="Left">
    <TabItem Header="Bitmap 学习">
        <DockPanel LastChildFill="True" >
            <WrapPanel DockPanel.Dock="Right" Width="150" Background="#EEEEEE">
            </WrapPanel>
            <Image Margin="10"
                x:Name="img" Source="E:\Pictures\test.jpeg"/>
        </DockPanel>
    </TabItem>

</TabControl>

整体框架如下

图像转灰度

转灰度往往是图像处理的第一步,其实质是将图像转换为矩阵,从而便于进行像素操作。wpf提供了非常方便的格式转换类,下面新建一个按钮,绑定下面的函数,即可实现图像转灰度的功能

csharp 复制代码
Bitmap bmp = new BitmapImage(new Uri(@"E:\Pictures\test.jpeg"));
private void btnGray_Click(object sender, RoutedEventArgs e)
{
    img.Source = new FormatConvertedBitmap(bmp, PixelFormats.Gray8, null, 0);
}

其中,FormatConvertedBitmap用于图像格式转换,其输入的4个参数分别是输入图像,图像格式,调色盘以及透明度。由于其继承自BitmapSource,故而可以直接绑定至img.Source中。

点击按钮后,结果如下

像素操作

在转为灰

度之后,图像仍旧以对象的形式存在,而无法直接索引。为此需要新建一个数组,来装载图像的像素,这个数组处理完成后,再把像素值填充进一个新的BitmapSource中。

下面实现一个阈值功能,将灰度值小于128的像素统统置0,实现类似下图的效果

代码如下

cs 复制代码
private void btnPixel_Click(object sender, RoutedEventArgs e)
{
    var src = new FormatConvertedBitmap(bmp, PixelFormats.Gray8, null, 0);
    var h = src.PixelHeight;    // 图像高度
    var w = src.PixelWidth;     // 图像宽度

    var pixels = new byte[h * w];
    src.CopyPixels(pixels, w, 0);
    pixels = pixels.Select(x => x>128 ? x : (byte)0).ToArray();
    img.Source = BitmapSource.Create(w, h, 96, 96,
        PixelFormats.Indexed8, BitmapPalettes.Gray256, pixels, w);
}

其中用到了两个BitmapSource的方法,首先通过CopyPixels将像素赋值给pixels,然后再调用Create来创建。

相关推荐
艾醒18 分钟前
探索大语言模型(LLM):大模型微调方式全解析
人工智能·算法
IvanCodes22 分钟前
RTX 4090 加速国产 AIGC 视频生成:腾讯混元与阿里千问开源模型
人工智能·开源·aigc·音视频
说私域29 分钟前
定制开发开源AI智能名片S2B2C商城小程序的会员制运营研究——以“老铁用户”培养为核心目标
人工智能·小程序·开源
格林威33 分钟前
常规可见光相机在工业视觉检测中的应用
图像处理·人工智能·数码相机·计算机视觉·视觉检测
循环渐进Forward35 分钟前
Go语言:给AI开发装上高性能引擎
开发语言·人工智能·golang
skywalk81631 小时前
调试parlant的大模型配置,最终自己动手写了g4f的模块挂载
网络·人工智能·语言模型·tiktoken
MUTA️1 小时前
论文速览:从ConvNeXt 到 ConvNeXt V2
人工智能·深度学习
九天轩辕1 小时前
用一个 Bash CLI 管理多款 AI 开发工具:jt-code-cli 实战与原理解析
开发语言·人工智能·bash
张较瘦_2 小时前
[论文阅读] AI+软件工程 | 开发者 AI 需求新指南:任务感知视角下的负责任 AI 实证研究
论文阅读·人工智能·软件工程
blues_C2 小时前
Playwright MCP vs Chrome DevTools MCP vs Chrome MCP 深度对比
前端·人工智能·chrome·ai·chrome devtools·mcp·ai web自动化测试