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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何求最长回文子串

    如何求最长回文子串回文字符串,就是像“12321”这种轴对称形式的字符串,系不系很简单呀(狗头)。但并不是所有的字符串都是这种整个串都是回文串的。有些计算机问题就是在一个字符串中找出一段最长的回文字符子串,这个时候时候,我们会很自然的想到一种暴力的方法来解决。1975年,一位叫Manacher的人发明了一个算法,这个算法是用来查找一个字符串的最长回文子串的方法。…

    2022年5月8日
    54
  • MyEclipse8.6注册码代码「建议收藏」

    MyEclipse8.6注册码代码「建议收藏」将MyEclipseGenjava类添加到MyEclipse项目中,右健运行(runasjavaapplication)在控制台输入要注册的name按回车,

    2022年9月29日
    2
  • YDOOK: ASCII码表:完整的 ASCII码表 ASCII码官方全收录

    YDOOK: ASCII码表:完整的 ASCII码表 ASCII码官方全收录YDOOK:ASCII码表:完整的ASCII码表ASCII码官方全收录ASCii打印字符对照表DEC OCTHEX BIN 缩写/符号 HTML实体 符号描述0 000 00 00000000 NUL &#+000; Nullchar(空字符)1 001 01 00000001 SOH &#+001; StartofHeading(标题开始)2 002 02 00000010 STX &#+002; StartofText(正文开始)3 003

    2022年6月6日
    1.6K
  • zero based budgeting_monetdb

    zero based budgeting_monetdbMcObjectODBCimplementsmostoftheODBC3.0standardsexcept‘descriptors’, whicharesupplementary.Currently,theMcObjectODBCdriverreturns“02.00”asthe driverversion.OpenaDOSCMD.EX

    2022年10月14日
    3
  • 基于matlab的低通滤波器的设计_matlab带阻滤波器函数

    基于matlab的低通滤波器的设计_matlab带阻滤波器函数基于MATLAB的带通滤波器设计滤波前滤波后频谱图501001502002503003504004505000.511.522.5Frequency(Hz)Time0501001502002503003504004505000.511.522.5Frequency(Hz)Time时域图样500100015002000250030003500-1-0.8-0.6-0.4-0.20…

    2025年8月30日
    4
  • Eclipse导入Maven项目详解(新手初学)

    Eclipse导入Maven项目详解(新手初学)最近遇到Maven管理下的SpringMVC项目,组内某位将项目代码扔过来,一脸懵逼(囧),查阅了一些资料后终于将此项目运行通了(>_<),特此记录下来与各位分享。通俗的来说,Maven就是个类似于git的项目管理工具。而SpringMVC就是将M(Model)、V(View)、C(Controller)三者进行分离进行处理,更有利于开发的进行。下面我将介绍一个别人已经编译好的Maven项

    2022年5月31日
    48

发表回复

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

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