如何在控制台窗口中使用C ++显示图像?

时间:2016-07-12 07:21:46

标签: c++ windows

我需要使用C ++(Windows 10)在控制台窗口中显示图像(bmp)。

不按字符显示,因为我已经知道如何,但是像普通图像一样逐像素地显示图像。

并不是通过启动另一个应用程序来在另一个窗口中显示图像,而是在黑色控制台窗口中。

我在互联网上搜索过它,但似乎没有找到一种方法,不使用像opencv这样的东西。有没有办法自己做,没有opencv?

7 个答案:

答案 0 :(得分:1)

如果不使用图书馆,则无法做到这一点。

这样做的一种方法是制作自己的控制台窗口,让你这样做。

我不确定你的操作系统是否允许你操纵控制台窗口的像素。

答案 1 :(得分:1)

您的假设是错误的:通常,C ++(或C)程序甚至可能不会从某个“控制台窗口”启动(例如,它可能以“批处理模式”启动)。特别是,一些C ++实现可以在没有任何屏幕的计算机(例如数据中心的Linux服务器,这是Internet上的大部分服务器)上运行(因此没有任何控制台窗口)。嵌入式计算机可以用标准C ++(例如C ++ 11或C ++ 14)编程,无需任何屏幕或控制台窗口。

(即使在Windows上,我不知道也从未使用过,我确信有一些启动程序的方法 - 通过配置计算机来启动一些守护进程或服务器 - 在任何“控制台窗口”之前存在)功能

因此,您应该更准确地定义您的平台。一般来说,答案可能是平台和操作系统特定的。

我强烈建议使用像Qt这样的可移植图形框架(特别是,如果您仔细编码,它会使您的代码更具可移植性)。当然,您需要您的用户拥有它,或者您使用Qt分发您的代码。

C++14标准(以及C ++ 11及更早版本)不了解图像或控制台窗口,因此(一般情况下,不提及任何平台或操作系统),您的问题毫无意义。

答案 2 :(得分:1)

控制台应用程序只能显示文本,因此您无法直接在那里绘制任何内容。对于绘图,您需要创建Windows应用程序(使用C ++,Win32,MFC或所有其他语言)。

答案 3 :(得分:1)

我能够使用SetPixel函数在控制台中显示图像。您将需要下载EasyBMP库并将其放在Visual Studio项目目录中。 我使用了以下代码:

#include <windows.h>
#include <iostream>
#include "EasyBMP.h"

void DrwImage(std::string imagePath, HDC* console);
int main() 
{
  //Get current console handle
  HWND console = GetConsoleWindow();
  //Get a handle to console
  HDC dc = GetDC(console);
  // Call DrwImage. It must be a bitmap image
  DrwImage("mybitmap.bmp",&dc);
  return 0;
}
void DrwImage(std::string imagePath, HDC* console) {

   BMP image;
   image.ReadFromFile(imagePath.c_str());
   //image.SetBitDepth(32);
   for (int x = 0; x < image.TellWidth(); x++)
   {
       for (int y = 0; y < image.TellHeight(); y++)
       {
          int RED = image.GetPixel(x, y).Red;
          int GREEN = image.GetPixel(x, y).Green;
          int BLUE = image.GetPixel(x, y).Blue;

          int ALPHA = image.GetPixel(x, y).Alpha;

          COLORREF COLOUR = RGB(RED, GREEN, BLUE);
          if (ALPHA == 0) {
              SetPixel(*console, x, y, COLOUR);
          }
       }
   }
}

我注意到,如果您在调试模式下运行它,将会抛出一个错误,但是如果您直接从命令提示符下或在文件资源管理器窗口中运行它,则应该可以正常工作。我对结果感到非常惊讶。

enter image description here 请注意,在屏幕上绘制图像的速度确实很慢。为了显示图像,我建议使用GUI框架,例如GTK或wxWidgets。 GUI框架已针对执行此类任务进行了优化。

答案 4 :(得分:0)

哦,只需查看(或逆向工程)caca代码;-)

请参阅example use

答案 5 :(得分:0)

我想我刚刚找到了我需要的东西。  SetPixel()函数实现了我想要的效果。

虽然这张图片严格来说并不是&#34;输出&#34;但是它会显示出来。

enter image description here

答案 6 :(得分:0)

查看此project。以下是在终端中显示图像的一些示例: Integrating GNUplot to a terminal Integrating ImageMagick to a terminal