【问题标题】:Convert BMP to PNG in memory for Clipboard pasting in .Net将内存中的 BMP 转换为 PNG,以便在 .Net 中粘贴剪贴板
【发布时间】:2011-03-31 21:13:49
【问题描述】:

这个similar question's 的答案都需要保存文件。但是,我正在尝试转换文件,然后将其复制到剪贴板。

如何在不保存到文件系统的情况下将位图(或任何图像)转换为 PNG?

更新:
我正在尝试将图像粘贴到应用程序中(在本例中为 Evernote)。当您将图像复制到剪贴板(例如通过浏览器)时,它会记住其图像格式,当您将其粘贴到剪贴板时,它将创建具有相同格式的图像。例如,如果您复制 PNG,它将粘贴 PNG。如果您复制 JPG,它将粘贴 JPG 等。

我正在尝试获取剪贴板中当前的任何图像,将其缩放到我想要的大小,然后将其作为 PNG 保存在剪贴板中,这样当它粘贴到 Evernote 时,它​​将创建一个 PNG。

当我在浏览器中复制 PNG 图像时,我看到以下格式:HTML FORMATCF_BITMAPCF_DIBCF_DIBV5。我不确定哪些 Evernote 用于粘贴。我的印象是CF_BITMAP,但是在阅读了下面的 cmets 之后,我猜它使用的是其他格式之一。

如何在剪贴板中放置一个粘贴时将被视为 PNG 的图像?

【问题讨论】:

  • 您打算将它粘贴到哪里?我认为剪贴板不会以 jpg/png 等文件格式存储图像。除非您打算将其作为文件粘贴到目录中?
  • @russau:我更新了问题以澄清我想要做什么。
  • “当您将图像复制到剪贴板(例如通过浏览器)时,它会记住其图像格式” - 这是完全错误的。您可能对此感到困惑,因为某些应用程序使用 png 内存流来弥补标准 Windows 剪贴板不支持透明度这一事实。

标签: c# .net image-processing clipboard in-memory


【解决方案1】:

Bitmap 保存到MemoryStream

byte[] result = null;
using (MemoryStream stream = new MemoryStream())
{
    bitmap.Save(stream, ImageFormat.Png);
    result = stream.ToArray();
}

【讨论】:

  • 能否请您提供将其转换为Image 所需的代码? (我现在正在尝试自己解决这个问题,我会将其作为评论发布,以便您复制/粘贴)
  • 我最好的猜测是 Image result = Image.FromStream(stream); 而不是 result = ... 行。如果您同意,能否请您更新答案?
  • @eagle: Am Image 是一个图像。写入流(文件或内存)时,它只是一个 Bmp/Png/Jpg/etc。
  • @eagle:你已经有一个BitmapBitmap 派生自 Image,所以它已经是一个 Image 开头。
  • @James, @Timwi:我更新了问题以澄清我想要做什么。
猜你喜欢
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多