【问题标题】:How to get path of Properties.Resources.Image in .NET如何在 .NET 中获取 Properties.Resources.Image 的路径
【发布时间】:2012-12-25 06:53:37
【问题描述】:

我在这篇文章之后添加了一张图片作为资源: How to create and use resources in .NET

我正在使用 PDFSharp 库创建 PDF。绘制图像的方法,需要图像的路径。如何获取Properties.Resources.Image的路径?

或者还有其他方法可以做到这一点吗?

【问题讨论】:

  • 您不必保存图像(位图)来绘制它,请参阅我的答案作为示例。
  • 我看不出已接受的答案(将图像保存到磁盘)如何成为“更好”的选项。它涉及更多的代码,意味着更多的维护和影响可读性。此外,图像将在磁盘上复制(资源已经占用磁盘空间)并占用更多磁盘空间,必须执行更多代码来删除临时图像并使其更容易出错。你真正需要的只是改变一个方法调用来避免这一切。
  • @Mario:有些人在实际使用 MigraDoc(使用 PDFsharp)时编写 PDFsharp。对于 MigraDoc,您需要一个文件名,因此可以保存到文件中。对于 PDFsharp,使用图像更好,因此不需要保存到文件。由于该问题没有 MigraDoc 标签,我认为您的答案更好。
  • @ThomasH 很高兴知道这里的实际情况 =)

标签: c# .net pdfsharp


【解决方案1】:

Properties.Resources.Image 是内存资源。

您可以将图像保存到临时文件并获取路径。

var path = Path.GetTempPath();
Properties.Resources.logo.Save(path);

以上使用Bitmap.Save

【讨论】:

  • 如果是图像,你真的应该使用 File.WriteAllBytes 而不是 WriteAllText。您不应将二进制数据视为字符串;可能会发生奇怪的事情。
  • 当我尝试File.WriteAllBytes(path, Properties.Resources.logo;); 时,我得到了无效的表达式术语。如果我执行File.WriteAllBytes(path, Properties.Resources.logo);,我会收到错误消息:1) System.IO.File.WriteAllBytes 的最佳重载方法匹配具有无效参数。 2) 参数 2:无法从 System.Drawing.Bitmap 转换为 byte[]。
  • 哦,它的位图,有更好的API,bitmap.Save()
  • 在调用 Save 方法时,我收到一些关于一般异常 GDI+ 的错误。这很常见吗?
  • 表示位图文件有问题。通常 GDI+ 抛出 OutOfMemoryException 有很多原因。
【解决方案2】:

您可以使用XImage.FromGdiPlusImage() 实际创建图像,而无需保存它:

var image = XImage.FromGdiPlusImage(Properties.Resources.logo);

【讨论】:

  • hmmm ...我收到一条消息“'XImage'不包含'FromGdiPlusImage'的定义” ....在XImage.cs中我可以看到一个注释掉的静态方法FromGdiPlusImage
【解决方案3】:

从 PDFsharp/MigraDoc 1.50 beta 2 及更高版本开始,您在使用 MigraDoc 时不再需要路径。已经提到 PDFsharp 不需要文件名,因为可以从例如文件中读取图像。流。

MigraDoc 仍然需要一个字符串。您将图像数据编码为字符串(BASE64 格式)并将该字符串作为文件名传递。

另请参阅:
http://pdfsharp.net/wiki/MigraDoc_FilelessImages.ashx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2019-11-27
    • 2021-07-06
    • 2010-09-27
    相关资源
    最近更新 更多