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


相关推荐

  • 使用tinyxml2库解析xml

    使用tinyxml2库解析xmltinyxml2简介tinyxml2是c++编写的轻量级的xml解析器,而且是开放源代码的,在一些开源的游戏引擎中用的比较多。源码托管在github上。源码地址:https://github.com/leethomason/tinyxml2tinyxml2使用起来非常简单,下载源码后无需编译成lib文件,直接將tinyxml2.h和tinyxml2.cpp两个文件添加到你自己的工程中即可。

    2022年5月5日
    41
  • 288÷4×7解决什么问题_java has not been found

    288÷4×7解决什么问题_java has not been found前言:今天连接zookeepter的时候出现问题(上午连接的时候还没问题的,下午就出现了问题,很是无奈)报错信息如下:java.net.ConnectException:Connectiontimedout:nofurtherinformation atsun.nio.ch.SocketChannelImpl.checkConnect(NativeMethod) ats…

    2022年9月18日
    5
  • java数组反转Reverse

    java数组反转Reverse三种反转数组的方法:publicclassReverseArray{publicvoidreverse(int[]arr){for(inti=0;i

    2022年6月9日
    204
  • java类加载过程详解_java三个类加载器

    java类加载过程详解_java三个类加载器朋友给我发了一道有意思的题目,如下为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢,原因很简单,就是类加载过程的不同。这就扯到基础理解上了,就是Java是如何加载一个类的呢?上图是我绘制的整个Java类加载过程。首先是编译期,将Java源文件也就是敲好的代码通过编译,转换成.class文件,也就是字节码文件(byte),然后经过传输传…

    2022年8月11日
    7
  • php 将网络图片下载本地[通俗易懂]

    php 将网络图片下载本地

    2022年2月12日
    52
  • xman的思维导图快捷键_macz技巧分享:思维导图XMind快捷键汇总「建议收藏」

    xman的思维导图快捷键_macz技巧分享:思维导图XMind快捷键汇总「建议收藏」在思维导图XMind中,快捷键是可以大大提高绘图效率的存在。掌握常用的快捷键组合,就可以在键盘上运指如飞,快速地进行思维导图的绘制。还在等什么?感兴趣的朋友,下面就和小编一起来看看吧!在XMind:ZEN中,主要的快捷键类型有四种,分别是:文件(File)、插入(Insert)、编辑(Edit)和查看(View)。一、文件文件快捷键,指的是对当前文件整体的一个操作,常见的功能有…

    2022年6月5日
    66

发表回复

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

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