【问题标题】:Processing images without GDI+ in C#在 C# 中处理没有 GDI+ 的图像
【发布时间】:2014-03-16 00:35:29
【问题描述】:

由于某些原因,我需要在不使用 GDI+ 的情况下编写一些图像处理函数。我需要能够对图像进行以下操作。

  • 在现有图像上绘制一些形状(主要是具有纯色背景的矩形)。我经常使用 GDI+ 中的Graphics.DrawImage() 函数来执行此操作。
  • 在现有图像上绘制文本。我经常使用 GDI+ 中的 Graphics.DrawString() 函数来执行此操作
  • 将图像保存到 MemoryStream。我通常通过 GDI+ 中的 Image.Save(stream, imgformat) 函数来执行此操作
  • 获取图像字节。我通常通过MemoryStream.ToArray() 函数来执行此操作。我需要bytes,因为我需要能够使用context.Response.BinaryWrite(imageBytes) 方法将图像发送到HttpContext()

我已经看过AForge.net,但它缺少Image.Save() 方法。它使用 GDI+ 的原生 Bitmap.Save() 方法。所以我似乎无法在 AForge 中生存 GDI+。

我还查看了 OpenCV 及其 .NET 包装器Emgu,但经过 2 天的努力,我无法成功地将项目集成到我自己的项目中(我知道这听起来很傻,但那是真相。按照所有教程,可能有 20 多个 SO 帖子对此没有帮助,因为我的解决方案结构比(更复杂的)常规解决方案要多一点。

我怎样才能做到这一点?请告诉我一些方法。您是否甚至发现自己处于这种情况(需要处理图像但没有 GDI+ 的情况)?还有哪些其他库可以帮助我?

【问题讨论】:

  • 我想我会问一个显而易见的问题。为什么不使用 GDI+?您真的要尝试在内存中手动表示位图并为每种文件类型编写自己的持久性机制吗?
  • 很好的问题,“C# 中的 GDI+ 较少的图像处理”,我对这个问题的答案很感兴趣。 :)
  • 问题是GDI+在保存图像时保持图像质量的能力很差。另一方面,我厌倦了解决Generic GDI+ errors。与其编写我自己的图像处理机制,我可能会在这方面使用一些 .net 库?
  • “处理图像”并不意味着“保存图像”。如果保存图像是您唯一关心的问题。我建议您考虑在用于保存图像的编码器上实际设置正确的值。也许looking here might help you。您可以设置 100% 的质量并使用不同的格式来获得所需的结果。 GDI+ 不只是以单一质量保存。如果你想要更好......你需要告诉它。
  • 我完全同意你的看法。但是,Save 仍然是图像处理的一部分,这也是我的大部分问题所在。每项任务都需要我将图像保存在某个地方,有时保存在 temp 文件上,有时保存在 MemoryStream 上。对于其他小故障,我仍然需要在 GDI+ 中幸存下来……仍然……

标签: c# asp.net .net image-processing gdi+


【解决方案1】:

最近有一个项目正在蓄势待发,恰如其分地称为“ImageProcessor”:https://github.com/JimBobSquarePants/ImageProcessor - NuGet 报告称,截至 2016 年 6 月,下载量已超过 344,000。

Scott Hanselmann 大约 8 个月前对它做了一个功能,解释了 .NET Core 没有 System.Drawing 的动机(我注意到 Windows Azure 没有正式支持网站角色中的 GDI):http://www.hanselman.com/blog/RFCServersideImageAndGraphicsProcessingWithNETCoreAndASPNET5.aspx

【讨论】:

    【解决方案2】:

    我只是试图在这里回答一个类似的问题: server-side graphics generation in .net/c#

    添加任何其他矢量图形(和布局)也很简单。如果您需要示例项目或代码,请告诉我。

    【讨论】:

    • 我看不出这有什么相似之处。这里的 OP 询问如何在不使用内置库的情况下操作图像。此外,这更像是一个评论而不是一个答案。
    猜你喜欢
    • 2010-09-06
    • 2014-07-11
    • 2012-09-28
    • 1970-01-01
    • 2012-01-15
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多