vio-lin 发表于 2012-12-17 21:14:42

字符版badapple 源代码

http://v.youku.com/v_show/id_XMjkyNzM1NjA4.html
偶然找到的 我也不怎么明白 放上来 大家研究研究
程序分两个部分 转化为字符 和打印字符
转化部分
/**************************************************************
** 程序名称:图片2字符图片
** 程序功能:图片根据灰度转换为ASCII字符图片
** 编译环境:VC++6.0 EGE 12.06
** 作者信息:Geodesic <Geodesicwl-cpro@yahoo.cn>
** 最后修改:2012-07-19
**************************************************************/
#include <graphics.h>
#include <stdio.h>

/*
* Ascii字符和灰度
* */
const struct AsciiPix
{
char ascii;
int gray;
}ascpix = {' ','`','.','^',',',':','~','"','<','!','c','t','+','{','i','7','?',
'u','3','0','p','w','4','A','8','D','X','%','#','H','W','M',
70,68,66,63,61,59,55,53,51,49,47,45,43,41,39,37,35,33,31,29,27,25,23,21,19,17,15,13,9,7,5,0};
/*
* 搜寻灰度gray的替代字符
* gray待替换的灰度
* ascpix用于替换字符和对应灰度结构体
* */
static SearchAsc(struct AsciiPix ascpix, int gray)
{
int loop;
loop = 0;
while(gray < ascpix.gray && loop < 32 - 1)
loop++;
return ascpix.ascii;
}
/*
* 图片转为字符,并保存到AscPic.txt中
* start第一张图片的序号
* end最后一张图片的序号
* 默认图像尺寸160×120像素
* 默认扫描块为宽1高2的矩形(线段)
* */
void Pic2Asc(int start, int end)
{
int row, col;
int gray;
int loop;
char filename;
/*打开文件*/
FILE *fp;
if((fp = fopen("AscPic.txt", "w")) == NULL)
{
outtextxy(0, 0, "文件打开失败");
Sleep(3000);
return;
}
/*开始转换*/
PIMAGE img;
for(img = newimage(), loop = start; loop <= end; loop++)
{
sprintf(filename, "BAD_APPLE%08d.jpg", loop);
outtextxy(0, 0, filename);
getimage(img, filename, 0, 0);
for(row = 0; row < 120; row += 2)
{
   for(col = 0; col < 160; col++)
   {
    gray = (GetRValue(getpixel(col, row, img)) + GetRValue(getpixel(col, row + 1, img))) * 9 / 51;
    fputc(SearchAsc(ascpix, gray), fp);
   }
   fputc('\n', fp);
}
fputc('\n', fp);
}
/*善后处理*/
delimage(img);
fclose(fp);
}
/*
* 主函数
* */
int main(void)
{
initgraph(640, 480);
   
Pic2Asc(6529, 13009);
getch();
    closegraph();
return 0;
}



打印部分
/**************************************************************
** 程序名称:BadApple动画演示
** 程序功能:图像模式下,ASCII字符动画
** 编译环境:VC++6.0 EGE 12.06
** 作者信息:Geodesic <Geodesicwl-cpro@yahoo.cn>
** 最后修改:2012-07-23
**************************************************************/
#include <graphics.h>
#include <ege/fps.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
char Line;
FILE *fp;
int loop;

/*初始化*/
initgraph(960, 720, ege::INIT_ANIMATION);
setbkcolor(EGERGB(0xF5, 0xF5, 0xDC));

/*打开文件*/
if((fp = fopen("AscPic.txt", "r")) == NULL)
{
outtextxy(0, 0, "文件打开失败");
Sleep(2000);
exit(EXIT_FAILURE);
}
/*添加音乐*/
mciSendString("open BadApple.mp3 alias BadApple", NULL, 0, NULL);
mciSendString("play BAdApple", NULL, 0, NULL);

/*动画演示*/
fps f;
setcolor(EGERGB(0xFF, 0x0, 0x0));
    for ( ; !feof(fp) && is_run(); delay_fps(30))
{
for(loop = 0; loop < 61; loop++)
{
   if(fgets(Line, 162, fp) == NULL)
    break;
   setcolor(EGERGB(0x0, 0xFF, 0x0));
   outtextxy(0, loop * 12, Line);
}
}

/*善后处理*/
fclose(fp);
closegraph();
return 0;
}


秋声赋 发表于 2012-12-17 22:15:35

其实我看到过用Lua写 在wow里面当插件跑的

冰糕_要忘记 发表于 2012-12-26 20:11:24

神啊。。。

冰糕_要忘记 发表于 2012-12-26 20:11:54

可能我觉得复杂的东西实际写出来完全不需要太多话的样子。。。哦这。。。

小G去美帝学EMBS 发表于 2012-12-28 11:15:15

好高级的样子~~~

vio-lin 发表于 2012-12-28 12:01:28

小G去美帝学EMBS 发表于 2012-12-28 11:15 static/image/common/back.gif
好高级的样子~~~

看看就好 就当学习啦 我们在一直用c++做些实验时 突然看到这么个宝贝
奋发学习了 有没

风音洛洛 发表于 2013-1-22 15:39:47

取得了原视频的灰度值,用不同字母的相近灰度值填充的吧

wishout 发表于 2013-2-11 09:37:34

用java写过了

dawayangzen 发表于 2013-6-17 19:36:49

能发下该程序用的graphics.h头文件么?547985499@qq.com,谢谢

★夜月☆ 发表于 2013-7-15 22:43:48

就不能吧graphics.h也发下么=578=

wodhy 发表于 2015-1-17 00:06:32

b站有一个但是网址打不开QAQ
页: [1]
查看完整版本: 字符版badapple 源代码