ASCII art with C#
翻译说明:原文版权归作者所有
原文作者:Daniel Fisher (lennybacon)
原文地址:http://www.codeproject.com/aspnet/ascii_art_with_c_.asp
译 者:zitiger http://zitiger.cnblogs.com/
- Download source files - 6.06 Kb
- Download VB.NET port - 5.98 Kb [by Paul Farry]
- Download demo project - 23.4 Kb
Introduction (介绍)
Behind the scenes: I like C# and I like ASCII art. So I asked myself if somebody has written some image to ASCII application in C#. I Googled but found nothing. I did image manipulation stuff for my company and so I decided to build a basic image-to-ASCII conversion library in C#.
背景:我喜欢C#和ASCII 艺术,所以试图知道是不是已经有人使用C#写了把图像转换成ASCII的应用.我Google了一下,没有发现.在公司我从事图像处理素材,所以我决定写一个把图像转换成ASCII的基本类库.
You can see a running sample here.
你能在这里看到一个运行着的例子.(译者注:我没有能够打开这个页面.)
Step 1: The Upload Form. (第一步 上传表单)
To keep it quite simple, I just check the content type and let my library do the rest.
简单起见,我只检查了上传文件的类型,其他的就交给我的类库去完成了.
File1.PostedFile.ContentType=="image/jpg" ||
File1.PostedFile.ContentType=="image/jpeg" ||
File1.PostedFile.ContentType=="image/pjpeg" ||
File1.PostedFile.ContentType=="image/bmp")
{
Output.Text = "<xmp>" +
StaticDust.AsciiArt.ConvertImage(
File1.PostedFile.InputStream) +
"</xmp>";
}
else
{
Step 2: The Library(第二步 类库)
The first thing I do is of course load the image:
首先,当然是加载图片.
Next I grayscale the image - you'll see later why.
接着我把图片灰度化-过会你就知道为什么要这么做了.
O.K. Now, we get to the interesting part.
好了,现在我们就要进入最有意思的部分了.
{
int _startY = (h*10);
for(int w=0; w<_image.Width/5; w++)
{
int _startX = (w*5);
int _allBrightness = 0;
I loop through the image's pixels and because I don't want one ASCII character per pixel, I take one per 10/5. To let every pixel influence the resulting ASCII char, I loop them and calculate the brightness of the amount.
我对图片的像素进行循环,我不想一个ASCII字符代表一个像素,而是代表10/5个(像素).为了让每个
像素效果都能在最终结果的ASCII字符里有所体现,我对代表一个ASCII字符的一组像素进行循环,然后计算它们的亮度和.
(译者:把图片上的所有像素按一定的大小分成N小块,再求出每一小块内所有像素的亮度和.)
{
for(int x=0; x<10; x++)
{
int _cY = y + _startY;
int _cX = x + _startX;
try
{
Color _c = _image.GetPixel(_cX, _cY);
int _b = (int)(_c.GetBrightness() * 10);
_allBrightness = (_allBrightness + _b);
}
catch
{
_allBrightness = (_allBrightness + 10);
}
Finally, I append different ASCII characters based on the calculated amount:
最后,我根据计算出来的和把不同的ASCII字符组合起来.
if(_sb<25)
{
_asciiart.Append("#");
}
else if(_sb<30)
{
That's all
Thanks to The Code Project and Chris Maunder, newtelligence and greetings to all C# coders out there.
感谢Code Project , Chris Maunder 和 newtelligence,并向所有C#爱好者问好.
译者的理解:
1. 通过Web上传一张图片;
2. 把图片进行灰度化(变成黑白);
3. 把图片划分成N个小块,对每个小块的内像素的亮度进行求和;
4. 根据每个小块的亮度平均值来选择合适的ASCII字符进行组合;
5. 输出.
欢迎杭州的朋友加入杭州.net俱乐部http://zitiger.cnblogs.com/archive/2005/07/28/201584.html.
另:马上大四了,找个实习单位,个人简历http://zitiger.cnblogs.com/archive/2005/07/26/200648.html,限杭州.