【问题标题】:Display image in Visual C++ console application? [closed]在 Visual C++ 控制台应用程序中显示图像? [关闭]
【发布时间】:2017-05-13 05:22:23
【问题描述】:

我们如何在 Visual C++ 控制台应用程序中显示图像?图像格式可以是 bmp、jpeg、tiff 等任何类型。我想打开一个新窗口并在该窗口中显示图像。我不想使用其他人的库,如 openCV 等。谢谢!

【问题讨论】:

  • 更具体。您想使用内置的 Windows 图片查看器吗?将图片转换为 ascii 艺术?什么?
  • 您是否要打开一个窗口(可以从控制台应用程序中实现——但这很棘手)并在其中显示图像?更具体地说明您要实现的目标。
  • 谢谢你们!是的,我想打开一个窗口并在该窗口中显示图像。
  • 如果你想打开一个新窗口并在其中显示一个位图,这并不太难,但对于一个 SO 答案来说可能太长了。您将需要使用 Win32 API - 我的这个项目 bitbucket.org/neilb/nclip 可以显示存储在剪贴板中的任何位图。

标签: c++ image visual-studio console display


【解决方案1】:

控制台是基于文本的环境,无法显示 jpgs/bmp。您需要使用创建窗口的 GUI 库(如果您使用的是 Windows,则如 WPF)来显示图像。

您已经通过使用 C++ 和控制台来使用其他人的库。使用库就是编程的全部内容。

您实际上可以使用以下命令从控制台应用程序打开 WPF 窗口:How to start the WPF window from console programmatically?

【讨论】:

  • 谢谢迈克尔。我知道我正在使用 C++ 标准库,但我的意思是我不想使用 openCV 等库。而且,正如马丁问我想打开一个新窗口并在该窗口中显示图像。
  • 更新了我的答案。您可以使用paint.exe 应用程序来显示您的图像或创建您自己的图像查看器。
【解决方案2】:

您可以非常轻松、轻松地显示来自任何 Windows 应用程序的图像。

例如,您可以使用 C++ 库的 system 函数来启动带有所需图像的 mspaint.exe。或者,您可以使用ShellExecute 等 API 函数在查看器中启动与文件扩展名关联的图像文件。

在控制台应用程序中system 特别好,因为您可以避免弹出额外的控制台窗口。

直接在控制台窗口中显示图像是另一回事,在技术上如此具有挑战性,人们不妨说这实际上是不可能的。

这与具有控制台或 GUI 子系统的应用程序无关,而是因为控制台窗口是为您管理的,我记得是由不同的专用进程管理的。

如果您想要这种效果(原始问题强烈指出),您可以做的是在控制台窗口顶部放置一个无边框窗口。也许,如果可行,请让控制台窗口成为所有者。但是您想将该顶部窗口与控制台窗口一起移动,我猜这会涉及一些复杂性。

【讨论】:

  • 打败我! system("mspaint.exe myimage.bmp")
  • 对于 Windows,ShellExecute 可能是更好的选择。
  • @JohnnyMopp:是的。将其添加到答案中。谢谢。 :)
  • 谢谢你们。但是,我所拥有的不是实际图像,而只是来自我的程序的像素数据,并且希望将这些值绘制为新窗口中的图像,而不是实际控制台中。
  • @NorxangLama:在 *nix-land 中,您可以以 C 数组常量的形式生成像素数据的文本文件表示。该格式是或曾经用于图标。但 Windows 不支持这种格式。使用 Direct2D 是一个 PITA,旧的 API 只有三种方式来存储图像文件:自己动手,例如可从 Windows 文档复制的 BMP 代码;或通过 API 函数存储为 WMF,其中一些关键部分未记录;或使用基于 COM 的 OLE 图像功能。我建议您使用第三方库,例如 PNG-writer。
猜你喜欢
  • 2013-03-08
  • 2016-02-05
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2011-11-19
  • 2019-01-18
  • 2012-06-21
相关资源
最近更新 更多