图片转ASCII码(C++)

it2022-05-05  168

图片转ASCII码(C++)

效果: 需要用到 EasyX 图形库 下载

#include <stdio.h> #include <stdlib.h> #include <graphics.h> #define HEIGHT 1 // 取平均值区域(像素) #define WIDTH 1 // 取平均值区域(像素) 1的话就是一个像素一个字符,值越高照片越模糊,宽高最好要一样 #define CHAR_HEIGHT 13 // 输出的字符高(像素) 字符像素宽高为13 #define CHAR_WIDTH 13 // 输出的字符宽(像素) 修改小的话,字符会显示不完整 char transcoding(int ascii)// 转码函数 { if (ascii > 200) return ' '; if (ascii < 33) return ascii + 33; if (ascii > 126) return ascii % 126 + 33; return ascii; } int main(void) { int height, width, average;// 图片的高,宽,一小块图片颜色灰度的平均值 int x = 0, y = 0;// 输出字符的位置 x,y IMAGE img; loadimage(&img, _T("图片3.jpg"));// 这里是加载当前文件夹下的图片 SetWorkingImage(&img);// 设置绘图目标为 img 对象,获取宽高 height = getheight() / HEIGHT;// 需要画的行数 width = getwidth() / WIDTH; // 需要画的列数 initgraph(width * CHAR_WIDTH, height * CHAR_HEIGHT);// 初始化画板 for (int i = 0; i < height; i++) { x = 0; for (int j = 0; j < width; j++) { average = 0; for (int h = 0; h < HEIGHT; h++) for (int w = 0; w < WIDTH; w++) // 获取点颜色,灰色处理,得到RGB的R值(0-255) average += GetRValue(RGBtoGRAY(getpixel(j * WIDTH + w, i * HEIGHT + h))); average /= (HEIGHT * WIDTH);// 平均值计算 SetWorkingImage();// 设置窗口为绘图窗口 outtextxy(x, y, transcoding(average));// 转码输出到画板 SetWorkingImage(&img);// 设置绘图对象为img x += CHAR_WIDTH;// 向右移动CHAR_WIDTH个像素,等待输出下一个字符 } y += CHAR_HEIGHT;// 向下移动CHAR_HEIGHT个像素,输出下一行 } saveimage(_T("ASCII图片.jpg"));// 保存绘制的图片 closegraph();// 关闭画板 printf("转换完毕!\n"); system("pause"); return 0; }

最新回复(0)