图片转ASCII码(C++)

图片转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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值