如何将一张图片打印在控制台(黑框)内?下面介绍具体方法,超级简单。

效果演示

思路

把图片转换成像素点,用控制台内输出的字符代替图片的像素。

实现

  1. 为了实现该功能,我们先需要一个能够输出一个彩色字符的代码:
#include <stdio.h>
#include <wchar.h>
#include <windows.h>int main() {HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);if (hOut == INVALID_HANDLE_VALUE)return GetLastError();DWORD dwMode = 0;if (!GetConsoleMode(hOut, &dwMode))return GetLastError();dwMode |= 0x0004;if (!SetConsoleMode(hOut, dwMode))return GetLastError();int r=100,g=100,b=100;wprintf(L"\x1b[38;2;%d;%d;%dmhello,world!", 255, 0, 0);return 0;
}
  1. 通过观察不难看出,wprintf函数第一个参数中字母m后面的就是要输出的内容,后面的三个参数就要输出的内容的rgb颜色值


3. 我们可以先拿到一个图片的颜色组成的数组,像这样:


4. 实际上,这就是一个c++二维数组,有row行col列,其中每三个数字分别对应图片中的一个像素点的rgb值,最终,我们只需要把该数组赋值给一个变量,再用两层for循环遍历二维数组输出内容即可:

main.cpp 中:

#include <stdio.h>
#include <wchar.h>
#include <windows.h>
#include <iostream>
using namespace std;const int row = 50; // 行数
const int col = 300; // 列数 int data1[row][col] = 在此处粘贴图片的二维数组数据 int main() {HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);if (hOut == INVALID_HANDLE_VALUE)return GetLastError();DWORD dwMode = 0;if (!GetConsoleMode(hOut, &dwMode))return GetLastError();dwMode |= 0x0004;if (!SetConsoleMode(hOut, dwMode))return GetLastError();for(int i = 0; i < row; i++){for(int j = 0; j < col; j+=3){wprintf(L"\x1b[38;2;%d;%d;%dm0", data1[i][j], data1[i][j + 1], data1[i][j + 2]);}cout << "\n";}system("pause");return 0;
}
  1. 现在你的工作是,确定变量col,row以及拿到图片的颜色数据
  2. 如何获取这些数据在我的文章 获取图片数据 中讲到
  3. 你只需要把数据复制到该cpp文件中的对应位置,并编译运行就可以了

c++如何把一张图片打印到控制台中?相关推荐

  1. python里进度条编程_Python实现控制台中的进度条

    相信很多人在写一些简单的Python脚本的时候都希望能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度. 我之前一直想实现这样一个东西,也查看了许多博客但是都找不到一个完美的解决方案 ...

  2. 在控制台中录入一个字符串 , 打印这个字符串中的字符以及出现的次数(Python)

    #练习2:在控制台中录入一个字符串 # 打印这个字符串中的字符以及出现的次数. # abcdbcdb # a字符1次 # b 3 # c 2 # d 2 str_input = "abcdb ...

  3. 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理

    if (process.env.NODE_ENV !== 'production') {logger.add(new winston.transports.Console({format: winst ...

  4. opencv将Mat读入的图像的像素值打印在控制台上

    //将Mat读入的图像像素值打印在控制台上,这里的Img为单通道 方法一:cv::Mat Img; IplImage *src;src=&IplImage(Img);for(int i=0;i ...

  5. JDBC查询所有记录打印到控制台上

    package cn.itcast.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Re ...

  6. java局部网内通话杂音_在Spring Boot反应式Web应用程序上启用SSL,并在控制台中对该打印进行http调用时出现异常噪音...

    在我创建了我的spring boot反应式Web应用程序以支持SSL之后,当我尝试对服务器进行http调用时,它会在控制台中的异常跟踪下面打印 . 作为应用程序所有者,我无法阻止任何人使用我的服务 . ...

  7. html 打印样式控制_如何使用样式打印HTML

    html 打印样式控制 Print CSS 打印CSS CSS @media print CSS @media打印 Links 链接 Page margins 页边距 Page breaks 分页符 ...

  8. 在控制台中录入学生姓名(python)

    在控制台中录入学生姓名        要求:姓名不能重复            如果录入esc,则停止录入,打印每个学生姓名. list_names = [] while True:stu_name ...

  9. 怎样用C++在控制台中编写俄罗斯方块

    我都没有在CSDN上写过东西,也不知道写什么好,下面就来讲诉一下我编的一个游戏吧.这是一个每个人小时候都玩过的游戏,也就是俄罗斯方块.我个人觉得俄罗斯方块这个游戏用MFC来编比较简单,而且我也编了一个 ...

最新文章

  1. MySQL基础篇:数据类型
  2. python模块os测试文件是否存在及基础原信息获取
  3. 昨天死线程的问题又找到了别的原因
  4. lucene升级至5.x版本出现 :IllegalStateException: IllegalStateException: unexpected docvalues type NONE...
  5. 腾讯----贪吃的小Q
  6. Text determination debug
  7. php传二维数组,JS用POST怎么传送二维数组给PHP
  8. java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析
  9. sshpass批量执行操作
  10. 产品研发过程管理专题——软件测试过程管理实践
  11. BULK INSERT, 实战手记:让百万级数据瞬间导入SQL Server
  12. Abaqus 用户子程序 UEL
  13. 微位科技李子阳:哈耶克—未来的价值单位
  14. Newifi路由刷机R6830
  15. 离职通知邮件主题写什么好_辞职邮件怎么写,需要包含哪些内容
  16. 【第一期】大话计算机网络(猫、路由器、wifi)
  17. Linux新手入门之基础命令操作
  18. 2018年 每日分享一个技术贴
  19. 神经网络如何训练数据,神经网络常用训练方法
  20. tensorflow2.0 基于LSTM模型的文本生成

热门文章

  1. 什么是计算机用英语解释,常用计算机英语解释
  2. mysql如何创建新用户并指定展示的数据库
  3. 压缩文件转为gz格式
  4. spark Word2Vec+LSH相似文本推荐(scala)
  5. DataTables Editor 2.0.4 Crack
  6. 基于socket的可发送表情简单即时通讯
  7. TML5期末大作业:红色自适应网上鲜花网站设计——浪漫红色自适应网上鲜花店(16页) HTML+CSS+JavaScript 大学生鲜花网页作品 植物网页设计作业模板 学生网页制作源代码下载
  8. 【Selenium IDE】菜单栏和工具栏介绍和基本操作:编辑/录制、导出、运行
  9. 【Scratch考级99图】图25-等级考试scratch绘制复杂图形太阳花 少儿编程 scratch画图案例教程
  10. 无限火力更新服务器公告,2021无限火力时间表公告 lol无限火力什么时候开放