用C/C++制作超大字体像素横幅

1.开门见山

        本项目利用easyX图形库完成,初代版本利用函数获取像素颜色后,给字体染色并打印,结果观感极差,经过优化后制作出第二版,先用矩形填充像素区域,然后再打印纯色字体,减轻滤镜效果带来的影响,所以本项目的实现原理并不困难,所以就不再拆成接口给大家讲解了。

2.应用场景

        制作大型趣味广告横幅,用于商业增色或婚礼浪漫,可在源码上进行多维优化。

 

 

3.项目实现

#include <iostream>
#include <graphics.h>

using namespace std;

int main(void) {

	char str[256] = " ";
	cout << "请输入想要说的话:";
	scanf_s("%s", str, sizeof(str));
	int count = strlen(str) / 2;
	char** data = (char**)malloc(sizeof(char*) * count);//创建一个字符串数组,数组中含有count个字符串
	for (int i = 0; i < count; i++) {
		data[i] = (char*)malloc(3); // 一个汉字两个字节和一个字符串结束符
		strncpy(data[i], &str[i * 2], 2);
		data[i][2] = 0; // 设置字符串结束符
	}

	IMAGE img1;
	loadimage(&img1, "kaixa.png"); // 源图片自备,建议少于4k像素,4090显卡随意

	int pic_width = img1.getwidth();
	int pic_height = img1.getheight();
	initgraph(80, 40);
	
	int* pixcolor;
	pixcolor = new int[pic_width * pic_height];

	SetWorkingImage(&img1);

	for (int i = 0; i < pic_height; i++) {
		for (int j = 0; j < pic_width; j++) {
			pixcolor[i * pic_width + j] = getpixel(j, i);// 收集像素信息
		}
	}

	SetWorkingImage();

	IMAGE img2;
	loadimage(&img2, "bk.png", pic_width * 16, pic_height * 16); // 设置画板,源图片自备, 
                                                                 // 建议纯白
	img2.Resize(pic_width * 16, pic_height * 16);

	SetWorkingImage(&img2);

	LOGFONT f;
	gettextstyle(&f);
	f.lfHeight = 16;
	f.lfWidth = 0;
	strcpy(f.lfFaceName, "黑体");
	f.lfQuality = ANTIALIASED_QUALITY;// 设置字体
	setbkmode(TRANSPARENT);

	int index = 0;
	for (int i = 0; i < pic_height; i++) {
		for (int j = 0; j < pic_width; j++) {
			int x = j * 16;
			int y = i * 16;
			setfillcolor(pixcolor[i * pic_width + j]);
			fillrectangle(x, y, x + 16, y + 16);

			settextcolor(BLACK);
			outtextxy(x, y, data[index]);
			index = (index + 1) % count;
		}
	}

	SetWorkingImage();

	saveimage("D:/csdn_akgry_pic.jpg", &img2);

	system("pause");

	closegraph();

	return 0;
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Akgry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值