在图片上逐字输出汉字

1

我如何在图片上使用for循环和sleep来实现逐字输出汉字,并在一行结尾自动换行,为什么我用outtextxy循环输出char a[]={"cbhadu,你好,bchdsni"},只显示英文,不显示中文?可不可以解答一下?给出循环输出汉字并换行的代码?

ava
J

2020-5-9

0

每个汉字两个字节,你用 char 循环,会将汉字的两个字节分别输出,导致没有显示。

解决办法:

使用 Unicode。就是说,用 wchar_t 替代 char,并且所有字符串函数都使用对应的 Unicode 版本。下面是简单示例:

// 代码功能:逐字输出含中文的字符串(支持换行符)
// 编译环境:Visual C++ 2010,EasyX_20200315(beta)
//
#include <graphics.h>
#include <conio.h>

int main()
{
	// 创建图形窗口
	initgraph(640, 480);

	wchar_t s[] = L"EasyX 的图形世界。\nThe quick brown fox jumps over a lazy dog.";

	rectangle(19, 9, 121, 400);				// 绘制边界
	int x = 20, y = 10;
	int w;
	for (unsigned int i = 0; i < wcslen(s); i++)
	{
		w = textwidth(s[i]);				// 获取字符宽度
		if (x + w > 120 || s[i] == L'\n')	// 超过最大宽度,或遇到回车,执行换行
		{
			x = 20;
			y += textheight(s[i]);
		}
		if (s[i] != L'\n')
		{
			outtextxy(x, y, s[i]);			// 输出字符
			x += w;
		}
	}

	_getch();		// 按任意键继续
	closegraph();	// 关闭绘图窗口
}
ava
慢羊羊

2020-5-9

非常感谢你的回答😊,但为什么输出的汉字是奇怪的符号? -  J  2020-5-9
@J 你的项目要设置为 Unicode 编码,不要用 MBCS 编码。我这里显示的中文都很正常。 -  慢羊羊  2020-5-9
@慢羊羊 完蛋,用Unicode编码的话,loadimage(&img, "bk.jpg", WIDDOW_WIDTH, WINDOW_HEIGHT)等easyX库的函数全报错了。有什么办法吗 -  J  2020-5-9
@J 用 Unicode 编码表示字符串就好了。把 "bk.jpg" 修改为 L"bk.jpg"。 -  慢羊羊  2020-5-9
@慢羊羊 char filename[20] = ""; sprintf(filename, "%d.jpg", i); loadimage(img0 + i,filename, 60, 60);这个要怎么修改呢其它都正常了 -  J  2020-5-9
@J char 修改为 wchar_t,字符串前面加 L,sprintf 修改为对应的 Unicode 版本函数 swprintf。 -  慢羊羊  2020-5-9
@慢羊羊 十分感谢👍 -  J  2020-5-9
技术讨论社区