asp.net - 可以在 Web 应用程序中使用 WPF 程序集吗?

标签 asp.net asp.net-mvc wpf

我有一个面向 .NET 4 的 ASP.NET MVC 2 应用程序,它需要能够动态调整图像大小并将它们写入响应。

我有执行此操作的代码并且它有效。我正在使用 System.Drawing.dll。

但是,我想增强我的代码,这样我不仅要调整图像大小,还要将其从 24bpp 降低到 4 位灰度。我一生都找不到有关如何使用 System.Drawing.dll 执行此操作的代码。

但我确实找到了一堆 WPF 的东西。这是我的工作/示例代码(在 LinqPad 中运行)。

// Load the original 24 bit image
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri(@"C:\Temp\Resized\18_appa2_015.png", UriKind.Absolute);
//bitmapImage.DecodePixelWidth = 600;
bitmapImage.EndInit();

// Create the destination image
var formatConvertedBitmap = new FormatConvertedBitmap();
formatConvertedBitmap.BeginInit();
formatConvertedBitmap.Source = bitmapImage;
formatConvertedBitmap.DestinationFormat = PixelFormats.Gray4;
formatConvertedBitmap.EndInit();

// Encode and dump the image to disk
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(formatConvertedBitmap));
using (var fileStream = File.Create(@"C:\Temp\Resized\18_appa2_015_s2.png"))
{
    encoder.Save(fileStream);
}

它使用 System.Xaml.dll、WindowsBase.dll、PresentationCore.dll 和 PresentationFramework.dll。使用的命名空间是:System.Windows.Controls、System.Windows.Media 和 System.Windows.Media.Imaging。

在我的 Web 应用程序中使用这些命名空间有什么问题吗?好像不对。

如果有人知道如何在没有所有这些 WPF 东西的情况下降低位深度(我几乎不明白,顺便说一句),我也会很高兴看到这一点。

最佳答案

没问题。您可以轻松地使用 WPF 从 ASP.NET 网站中进行图像处理。我之前曾多次在一个网站的幕后使用 WPF,它 效果很好。

我遇到的一个问题是 WPF 的许多部分都坚持调用线程是 STA 线程。如果您的网站改用 MTA 线程,您将收到一条错误消息,告诉您 WPF 需要 STA 线程。要解决此问题,请使用我在 this answer 中发布的 STAThreadPool 类.

关于asp.net - 可以在 Web 应用程序中使用 WPF 程序集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2422709/

相关文章:

asp.net - 如何从 session 对象的属性获取 asp.net session 参数的值

asp.net - 在 Internet Explorer 中打开文档时如何将 MS Word 模板文件 (dotx) 保存为 docx

asp.net-mvc - 如何使用 mvc View 来填充 Bootstrap 选项卡?

c# - MVC 应用程序 - 这是使用 Async 和 Await 的正确方法吗?

wpf - WPF 的 Fluent 设计工具包

c# - 我们在哪里可以看到命名语言值的完整列表?

c# - 如何为 web 方法传递可选参数?

c# - OleDbException (0x80004005) : Not specified error?

c# - 从 ASP MVC 中的区域 Controller 链接到根 Controller

c# - 在 xaml 中使用键绑定(bind)捕获一系列字符