用文字制作成图片

简介: 最近呢,我一个朋友要过生日,我像给她一个硬核的生日祝福。然后就想到了用文字拼成她的QQ头像

话不多说,先看示例

1a393f77157e05c22a437828b36968e.png


4d5ed683b3f8171cf689723b8b6e553.png


不多说,直接上源码! 有不会的加QQ问我,等我上几个星期的学后回家就告诉你。

#include"graphics.h"

#include"stdio.h"

int main(void)

{

char str[256] = "";//请输入要表白的话

scanf_s("%s", str, sizeof(str));

//把字符串转换成数组形式的,“我爱你”,转换成“我”,“爱”,“你”

int count = strlen(str) / 2;//计算汉字个数

char** data = (char**)malloc(sizeof(char*) * count);

for (int i = 0; i < count; i++)

{

 data[i]=(char*)malloc(sizeof(char) * 3);//"我"占两个字节+'0'

 strncpy(data[i], &str[i * 2], 2);

 data[i][2] = 0;//字符串结束符

}

initgraph(200,40);

IMAGE img;//图片需要加工

loadimage(&img,_T("zz.jpg"));

//颜色是用 红绿蓝色调配成的,用三个字节.

//int 4 个字节 char 1个字节

int width = img.getwidth();//宽度

int height = img.getheight();//高度

 int *pix=(int*)malloc(sizeof(int)*width*height);//动态内存分配

 if (pix == NULL)

 {

  printf("图片分辨率过高");

  exit(1);

 }

 SetWorkingImage(&img);//对哪个图片进行加工

 int k = 0;

 for (int i = 0; i < height; i++)

 {

  for (int j = 0; j < width; j++)

  {//取出指定位置的颜色

   pix[k++] = getpixel(j, i);//坐标是宽度和高的

  }

 }

 SetWorkingImage();//恢复默认工作区,开始画图!

 //开始使用汉字画图

 //定义一个新的图片

 IMAGE imgDest;//空图片

 //调整新图片

 /*imgDest.Resize(width, height);*/

 //调整大小

 imgDest.Resize(width * 12, height * 12);//一个像素扩充成12*12

 SetWorkingImage(&imgDest);

 //设置字体

 LOGFONT f;

 gettextstyle(&f);//获取当前的字体

 f.lfHeight = 12;

 f.lfWidth = 0;//默认

 strcpy(f.lfFaceName, "黑体");//设置字体名称

 f.lfQuality = ANTIALIASED_QUALITY;//清除锯齿

 settextstyle(&f);

 int index = 0;

 for (int i = 0; i < height; i++)

 {

  for (int j = 0; j < width; j++)

  {

   int x = j * 12;

   int y = i * 12;

   //取出颜色

   int color = pix[i * width + j];

   //设置汉字绘制颜色

   settextcolor(color);

   outtextxy(x, y,data[index]);

   index = (index + 1) % count;//对汉字进行取余

  }

 }

 SetWorkingImage();

 //把图片保存到磁盘

 saveimage("ok.jpg", &imgDest);

 //让图片自动显示出来

 system("rundll32.exe C:\\Windows\\System32\\shimgvw.dll,ImageView_Fullscreen d:\\ok.jpg");

 system("pause");

 return 0;

}

目录
相关文章
|
机器学习/深度学习 人工智能 算法
声画分离模型PixelPlayer
【2月更文挑战第12天】声画分离模型PixelPlayer
383 5
声画分离模型PixelPlayer
|
7月前
|
存储 编解码 监控
针对3-15分钟视频的抽帧策略:让Qwen2.5 VL 32B理解视频内容
针对3-15分钟视频,提出高效抽帧策略:通过每5-10秒定间隔或关键帧检测方法,提取30-100帧关键图像,结合时间均匀采样与运动变化捕捉,降低冗余,提升Qwen2.5 VL 32B对视频内容的理解效率与准确性。
|
存储 缓存 自然语言处理
Elasticesearch内存详解
Elasticesearch内存详解总结文章
5129 0
Elasticesearch内存详解
|
11月前
|
Linux
在线对Linux进行磁盘扩容的技术指南。
综上所述,Linux磁盘扩容的过程,重要的不仅是技术,更是对每一步骤的深刻理解和投入的爱心。只要手握正确的工具,我们不仅能满足"孩子"的成长需求,还能享受其中的乐趣和成就。
690 10
|
Ubuntu 开发工具 git
Ubuntu编译ffmpeg解决错误:ERROR: avisynth/avisynth_c.h not found
通过本文的详细指导,您可以顺利地在Ubuntu系统上配置和编译FFmpeg,并解决Avisynth头文件缺失的问题。
626 27
|
Ubuntu 安全 Linux
基于Ubuntu24.04原内核6.8.0升级到6.9.0
通过上述步骤,我们在Ubuntu 24.04系统上成功地将内核从6.8.0升级到了6.9.0。升级内核有助于提高系统的安全性和性能,但也可能带来兼容性问题。因此,在升级前备份重要数据,并确保新内核支持所需的所有硬件和软件。通过合理的验证和测试,可以确保系统在新内核上稳定运行。
2070 6
|
编译器 Linux API
BCC和libbpf的转换
BCC和libbpf的转换
348 3
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
412 1
成功解决:Could not resolve dependency: npm ERR! peer vue@“^3.0.2“ from vuex@4.0.2
这篇文章讨论了在使用npm安装依赖时遇到的一个常见问题,即无法解析依赖导致的"peer dependency"冲突错误。文章提供了几种解决方法,包括清除npm缓存、删除`node_modules`文件夹和`package-lock.json`文件,然后重新尝试安装,以解决版本冲突问题。
|
API Python
使用Python requests库下载文件并设置超时重试机制
使用Python的 `requests`库下载文件时,设置超时参数和实现超时重试机制是确保下载稳定性的有效方法。通过这种方式,可以在面对网络波动或服务器响应延迟的情况下,提高下载任务的成功率。
915 1