c++视频转字符画_c++字符数组转化为字符串

c++视频转字符画_c++字符数组转化为字符串运行此程序需要有graphics图形库#include <stdio.h>#include <graphics.h> // 图形库的头文件#define HEIGHT 8 // 转换后的高度#define WIDTH 8 // 转换后的宽度#define ASCII1 32 // 转换ASCII数量struct ASCII{ char as…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

EasyX库

运行此程序需要有graphics图形库,需要的小伙伴可以点击下方连接下载:
https://download.csdn.net/download/weixin_45525272/46595007

双击exe,安装对应VS版本的库即可

效果展示

输入图片路径后,回车 运行后当前目录会出现一个txt文件,转换成功
在这里插入图片描述

哈哈,可能这样看不出来
上原图

在这里插入图片描述
字符图片如下
在这里插入图片描述
不要放大此图,看着是不是有张人脸,很像原图

代码

直接上代码,放控制台即可运行

#include <stdio.h>
#include <graphics.h> // 图形库的头文件

#define HEIGHT 8 // 转换后的高度
#define WIDTH 8 // 转换后的宽度
#define ASCII1 32 // 转换ASCII数量

struct ASCII
{ 
   
	char asc[ASCII1];		// ASCII码的范围
	int gray[ASCII1];		// 灰度值的范围

}as{ 
    ' ', '`', '.', '^', ',', ':', '~', '"', '<', '!', 'c', 't', '+', '{', 'i', '7', '?',
	 'u', '3', '0', 'p', 'w', '4', 'A', '8', 'D', 'X', '%', '#', 'H', 'W', 'M',
	 0, 5, 7, 9, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
	 39, 41, 43, 45, 47, 49, 51, 53, 55, 59, 61, 63, 66, 68, 70 };


// 使用二分查找来计算字符与灰度值的匹配
char AsciiToGray(struct ASCII as,int gray)
{ 
   
	int low = 0;		// 低
	int mid;			// 中
	int high = ASCII1;	// 高

	// 
	if (gray <= as.gray[0])
	{ 
   
		return as.asc[0];		// 返回最低端Ascii码
	}
	else if (gray >= as.asc[ASCII1 - 1])
	{ 
   
		return as.asc[ASCII1 - 1];		// 返回最高端Ascii码
	}
	else
	{ 
   

		// 二分查找的核心
		while ((high - low) > 1)
		{ 
   
			mid = (low + high) / 2;			// 去中间值
			if (gray > as.gray[mid])		// 传入的灰度值大于结构体灰度值
			{ 
   
				low = mid + 1;				// 移动低标记
			}
			else
			{ 
   
				high = mid - 1;				// 移动高标记
			}
		}
		return as.asc[low];					// 返回ASCII码用于写入文本文件
	}
}

// 将图片转换为字符
void PhotoToAscii(struct ASCII as,char filename[])
{ 
   
	int height, windth, gray;		// 图像的高、宽、灰度值
	IMAGE img;

	// 加载图片文件
	loadimage(&img, filename);
	SetWorkingImage(&img);

	// 得到转换后图像的宽和高
	height = getheight() / HEIGHT;
	windth = getwidth() / WIDTH;

	// 打开文件 r 读 w 写
	FILE *file;
	if ((file = fopen("字符图案.txt", "w")) == NULL)
	{ 
   
		printf("文件打开失败!\n");
		exit(0);
	}

	for (int i = 0; i < height; i++)
	{ 
   
		for (int j = 0; j < windth; j++)
		{ 
   
			gray = 0;

			// 扫描每一块像素的灰度值进行累加
			for (int h = 0; h < HEIGHT; h++)
			{ 
   
				for (int w = 0; w < WIDTH; w++)
				{ 
   
					gray += GetRValue(RGBtoGRAY(getpixel(j*WIDTH + w, i*HEIGHT + h)));
				}
			}

			// 求像素点平均灰度值
			gray /= (HEIGHT*WIDTH);
			gray = (255 - gray) * 90 / 255;

			fputc(AsciiToGray(as, gray), file);
		}
		// 写入换行
		fputc('\n', file);
	}
	// 关闭打开的文件
	fclose(file);
}


int main()
{ 
   
	// 文件名的字符数组
	char filename[256];

	printf("请输入文件名(包含扩展名):");		// 提示
	gets_s(filename);							// 获取文件名
	PhotoToAscii(as,filename);					// 将图片转换为字符
	printf("转换成功!");

	return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170912.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java list 转json 字符串_fastjson将java list转为json字符串

    java list 转json 字符串_fastjson将java list转为json字符串1.直接用fastjson的静态方法stringJSON.toJSONString(list)方法就行,JSON.toJSONString(list)将javalist转为json字符串。2.toJsonString()方法,有两个重载,一个是JSON.toJsonString(list),直接将list转为json字符串:[{\”aid\”:10056,\”content_text\”:\”…

    2022年10月18日
    0
  • c语言位运算符的优先级_c语言运算符优先级由高到低

    c语言位运算符的优先级_c语言运算符优先级由高到低一、位运算(|&^~)运算符 描述 实例 & 按位与操作,按二进制位进行”与”运算。运算规则: 0&0=0;0&1=0;1&0=0;1&1=1; (A&B)将得到12,即为00001100 | 按位或运算符,按二进制位进行”或”运算。运算规则: 0|0=0;0|1=1;1|0=1;1|1=1;.

    2022年9月26日
    0
  • 关系数据模型——三个组成部分「建议收藏」

    关系数据模型——三个组成部分「建议收藏」关系模型的三个组成部分,是指关系数据模型的数据结构、关系数据模型的操作集合和关系数据模型的完整性约束。关系数据模型的数据结构主要描述数据的类型、内容、性质以及数据间的联系等,是目标类型的集合。目标类型是数据库的祖成成分,一般可分为两类:数据类型、数据类型之间的联系。关系数据模型的操作集合数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。它是操作算符的集合,包括若干操作和推理准则,用以对目标类型的有效实例所组成的数据库进行操作。关系数据模型的完整性约束数据模型中的数据约束主要描

    2022年4月19日
    59
  • 个人觉得好用的Xmind快捷键(mac)[通俗易懂]

    个人觉得好用的Xmind快捷键(mac)[通俗易懂]commandN新建脑图空格修改文字Delete删除文字commandZ撤销上一步Enter添加平行分支Tab添加子节点command+/-放大/缩小commandI上传图片command+Shift+H插入超链接command+1,2,3,4,5,6快速添加优先等级图标-收缩目前分支方向键展开当前分支…

    2022年6月5日
    73
  • C Primer Plus 第12章 12.6 分配内存:malloc()和free()

    C Primer Plus 第12章 12.6 分配内存:malloc()和free()

    2022年2月23日
    40
  • “12306”的架构到底有多牛逼?

    “12306”的架构到底有多牛逼?

    2020年11月13日
    194

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号