在WPF中绘制灰度位图

本文关键字:灰度 位图 绘制 WPF | 更新日期: 2023-09-27 18:21:13

我正在寻找一种将位图绘制为灰度级WPF DrawingContext的方法。我希望能够在给定的x,y位置绘制它,并将其缩放到给定的宽度和高度。256级灰度(8位灰度)就足够了。我在磁盘上有一个彩色位图文件,可以是bmp、png或jpg格式。

在WPF中绘制灰度位图

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
void DrawBitmapGreyscale(DrawingContext dc, string filename, int x, int y, int width, int height)
{
    // Load the bitmap into a bitmap image object
    BitmapImage bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.UriSource = new Uri(filename);
    bitmap.EndInit();
    // Convert the bitmap to greyscale, and draw it.
    FormatConvertedBitmap bitmapGreyscale = new FormatConvertedBitmap(bitmap, PixelFormats.Gray8, BitmapPalettes.Gray256, 0.0);
    dc.DrawImage(bitmapGreyscale, new Rect(x, y, width, height));
}

您可以使用效果来实现这一点——可能不如纯代码那么高性能,但提供了灵活性。

<Image Source="../Images/ChartSample.png" Stretch="Uniform" Margin="5">
<Image.Effect>
    <ee:ColorToneEffect DarkColor="Black" LightColor="White" ToneAmount="0" Desaturation="1" />
</Image.Effect>

将命名空间引用为的位置

xmlns:ee=”http://schemas.microsoft.com/expression/2010/effects&#8221;