随笔 - 9  文章 - 0 评论 - 23 trackbacks - 0
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我的标签

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

如何把一张图片转换成用不同字符表示的文本文件?

原理:
一张m*n大小的图片,实际上可以看成是一个m*n的矩阵。矩阵的每一个元素就是一个Color值,不同的Color值,用不同
的Ascii可以在屏幕上打印显示的字符来代替,于是可以得到一个m*n的每一个元素是一个Ascii字符的两维矩阵,
矩阵的每一行就是像素矩阵的每一行。再把这个字符矩阵输出到文本文件中保存,便可以得到图像对应的文本文件。
当然了,所用的Ascii字符越多,生成的图像也就越逼真。如果只用两个字符,就相当于生成了只有黑白两色的黑白照片一样。

核心代码:
  StringBuilder sb = new StringBuilder();
            for (int h = 0; h < image.Height; h++)
            {
                for (int w = 0; w < image.Width; w++)
                {
                    Color pixelColor = image.GetPixel(w, h);
                    //用均值法算出灰度值
                    int red = (pixelColor.R + pixelColor.G + pixelColor.B)/3;
                    int green = (pixelColor.R + pixelColor.G + pixelColor.B)/3;
                    int blue = (pixelColor.R + pixelColor.G + pixelColor.B)/3;

                    Color grayColor = Color.FromArgb(red, green, blue);
                    int index = (grayColor.R * 10) / 255;
                    sb.Append(asciiChars[index]);    //char[] asciiChars 为存储字符的数组。
                }

                sb.Append("\r\n");   //一行结束,加一个回车换行
             }

网上有在线转换的网站:www.photo2text.com.

posted on 2008-05-10 18:29 chzhcpu 阅读(2361) 评论(22)  编辑 收藏 网摘

FeedBack:
#1楼 2008-05-10 19:19 包建强      
前提是照片的色彩不能太丰富,底色最好是白色,对比度高一些,脸是脸,鼻子是鼻子,hoho
  回复  引用  查看    
#2楼 2008-05-10 19:27 1-2-3      
相当不错!
  回复  引用  查看    
#3楼 2008-05-10 19:28 aspnetx      
挺有意思
  回复  引用  查看    
有详细的代码下载吗?
  回复  引用  查看    
#5楼 2008-05-10 20:13 wingoo      
sf上有源码下载,,codeproject上也有类似项目
搜索ascii art即可

  回复  引用  查看    
#6楼 2008-05-10 20:31 tthxnz      
有意思
  回复  引用  查看    
#7楼 2008-05-10 20:35 生鱼片      
看看
  回复  引用  查看    
#8楼 2008-05-10 20:38 元宝      
只是不知用到什么地方去
  回复  引用  查看    
#9楼 2008-05-10 20:52 簡簡單單..      
很有创意..
  回复  引用  查看    
#10楼 2008-05-10 20:52 求知无傲      
呵呵,可以用来做啥哩?
  回复  引用  查看    
#11楼 2008-05-10 21:19 CoderZh      
http://www.cnblogs.com/Emoticons/yoyocici/224023586.gif" alt="" />不错~
  回复  引用  查看    
#12楼 2008-05-10 22:48 lijjj[未注册用户]
@求知无傲

可以进行图片的加密啊,根据像素数组反推图片啊(不知道行不行哦)。


  回复  引用    
#13楼 2008-05-10 23:01 oo縼箻ㄗs.鋒      
哈哈,前不久,自己也写过一个,很好完.
不过我的目的是为了帮朋友完成破解验证码的功能.
对方的验证码很简单的那种...

  回复  引用  查看    
#14楼 2008-05-10 23:09 BlueMountain      
学习了
  回复  引用  查看    
#15楼 2008-05-11 00:06 junli2201      
真的很不错!
  回复  引用  查看    
有意思
  回复  引用    
好象MSDN里有一个用C#写的现成的例程
  回复  引用  查看    
#18楼 2008-05-11 14:26 hoodlum1980      
//用均值法算出灰度值
int red = (pixelColor.R + pixelColor.G + pixelColor.B)/3;
int green = (pixelColor.R + pixelColor.G + pixelColor.B)/3;
int blue = (pixelColor.R + pixelColor.G + pixelColor.B)/3;

Color grayColor = Color.FromArgb(red, green, blue);


这一段代码,同一个值算三次有什么意义呢????还要再转回一次颜色,这是在干什么?不明白。转完了还是用了R变量,这到底在干什么???

  回复  引用  查看    
#19楼 2008-05-11 23:56 镜涛      
有意思
  回复  引用  查看    
#20楼[楼主] 2008-08-26 18:02 chzhcpu      
@hoodlum1980
可以增强代码可读性

  回复  引用  查看    
#21楼[楼主] 2008-08-26 18:03 chzhcpu      
@元宝
几天前见有人用这个做注册验证码

  回复  引用  查看    
#22楼 2008-11-03 13:40 齐.net      
哇,爽
  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1191467




相关文章:

相关链接: