求用C++编一个程序,能在统制台上通过字符显示同文件夹下的.bmp位图每一个像素点

求用C++编一个程序,能在控制台上通过字符显示同文件夹下的.bmp位图每一个像素点
想在vs2012环境下编程,注意是通过字符模式来显示图片,不是切换到图形模式或者使用窗体程序,要求能够浏览同一个文件夹下所有的图片,而不是只能用输入名字的方式浏览。
思路如下:
1.先要得到文件夹下所有的.bmp图片文件名称,(dir *.bmp>1.txt),先生成一个txt文件,再将txt文件中的位图名提取出来。
2.利用24位位图图像的存储原理(每个像素用三个字节表示,分别是绿,红,蓝三色的值,文件头+像素数据)。
3.位图中像素信息的获得。
4.近似色彩的表示(用SetConsoleTextAttribute函数)。
5.彩色到灰度图像的转换。
6.灰度与字符的对应关系。
实在不想做的话写个详细的思路也好啊~~求大神

------解决方案--------------------
rgb转灰度很简单:Gray = R*0.299 + G*0.587 + B*0.114

但是如果一个字符代替一个像素点的话效果会很差,因为分辨率太低了……
------解决方案--------------------
引用:
Quote: 引用:

这已经挺详细的了啊

因为是C++菜鸟,所以虽然知道思路但还是不太会实现。。就每步该用什么代码还是希望大家能提点一下。。

文件夹内容C标准库里好像有,或者你可以用boost::filesystem。
图像读取可以用freeimage库。
每个像素是红、绿、蓝三个通道。你可以简单地使用它们的平均值作为亮度。
亮度到字符,你可以写一个全局的字符数组变量,下标作为亮度,值是对应的字符。
------解决方案--------------------
提醒:
◆将控制台的字体尽量改小比如8
◆将控制台的行数和列数尽量设大比如640列×480行
◆chcp 437使用纯英文代码页
◆使用ASCII码\x20\xB0\xB1\xB2\xDB

------解决方案--------------------
开始、运行、cmd
在弹出的cmd窗口中输入
chcp 437
使用纯英文代码页
然后
按空格键,再松开空格键;
按住Alt键不放,依次按小键盘上的数字1、7、6,再松开Alt键;
按住Alt键不放,依次按小键盘上的数字1、7、7,再松开Alt键;
按住Alt键不放,依次按小键盘上的数字1、7、8,再松开Alt键;
按住Alt键不放,依次按小键盘上的数字2、1、9,再松开Alt键。
看看显示啥。

------解决方案--------------------
不是

引用:
Quote: 引用:

控制台下的字符256个能显示的更少
即使把位图转换成16位灰度图也有256个色值
难道转成8位灰度图?
感觉不现实

'M','N','H','Q','$','O','C','?','7','>','!',':', '-' , ';' , '.' , ' ',考虑到展示的是简单的位图(像素在100*100以内,颜色不用那么复杂,类似卡通画的就行),所以这几个字符貌似够了


不是像素的问题 是色值的问题 8位灰度图也还是332的rgb值 r值3位8种色值 b值2种4种色值
所以即使是8位灰度图也有2的8次方 即256个色值
难道你要做成4位位图 16个色值?
------解决方案--------------------
1.首先确认字体大小,比如m*n像素大小的字体。
2.对所有字符像素作分析,生成"字符->亮度"映射表。即根据每个字符的"有墨面积/无墨面积"得到一个亮度值。
3.把整个bmp分成连续排列的多个m*n大小的块,并根据RGB值获取亮度,或者一个像素对应一个字符也可以,不过那样图片会变得很大。
4.根椐亮度得到字符排列。
至于bmp文件的解析,那个简单,看文档吧。
修改字符亮度映射表可以更改显示效果。