在大家学会使用C或者C++语言在控制台上输入输出后,就会想能不能实现控制台来输出图片。然而在查找之后发现,可以用控制台输出16色字体。但是关于输出图片则是直接开始介绍windows中gdi提供的bmp图片输出函数。
实际上,在不使用其他工具的情况下控制台主要是用于输出字符形式。当然我们可以通过这种形式来输出图像。但是,由于图像类型众多,且图像的像素信息获取方式不同。这里主要是介绍控制台输出 各种类型的bmp图像。核心是将各类图片的像素信息转换为控制台的颜色信息,即32位位图转化为8位位图,24位位图转化为8位位图。
首先,在实现控制台显示BMP图片之前,我们需要知道一些原理。
- BMP格式图片信息
(https://blog.csdn.net/wsfdl/article/details/7957370
https://blog.csdn.net/wisepragma/article/details/53228990)
https://www.cnblogs.com/Asssjc/p/5742319.html
https://blog.csdn.net/weixin_42164528/article/details/80594667
- 控制台颜色显示原理 控制台用1byte表示颜色信息(前4位为BackgroundColor 后四位为前景色 ForegroundColor)
B1 | B2 | B3 | B4 | F1 | F2 | F3 | F4 |
前四位和后四位颜色组成原理一样,B1表示颜色明暗,B2表示RED B3表示 GREEN B4表示BLUE 四位共能够表示16种颜色
3、CHAR_INFO数据结构 屏幕缓冲区字符单元信息
typedef struct _CHAR_INFO {
union {
WCHAR UnicodeChar;
CHAR AsciiChar;
} Char;
WORD Attributes;
} CHAR_INFO, *PCHAR_INFO;
其中 Char存放字符的码值 Attributes存放字符属性
4 编程思路就是读取bmp图像的位图头信息和位图信息,之后根据不同位数的图像,进行相应读取图像颜色信息,之后进行转换后打印出来。
注意:图像大小只能通过控制台的字符大小来控制
文章后面贴有简单写的代码,仅供参考。
链接:https://pan.baidu.com/s/1K-ydHYAlfWEXztjjDJKpgQ
提取码:2kcu