如何使用数组操作图像

1

使用VC++6.0

  1. 请问如何对图像数组进行操作,比如读取图像和绘制图像,尝试使用类似单个图像的处理方法,没有成功。
#include <graphics.h>
#include <conio.h>

void main()
{
	int i;
	initgraph(699,440);
	IMAGE img1,img[5];
	loadimage(&img1,"E:\\图片\\QQ图片20191205132706.png");
	putimage(0,0,&img1);
	for (i=0;i<5;i++)
	{
		loadimage(&img[i],"E:\\图片\\(i+1).jpg");
		putimage(100+i*66,60+i*58,&img[i]);
	}
	getch();
	closegraph();
}​
  1. 该如何将二维数组显示为图像,比如date[2][2]={1,2,3,4},使1,2,3,4各表示一种图像,并显示。
ava
谢衡南

2019-12-5

0

使用数组操作图像的方法并没有什么特殊。你的代码在处理文件名时有错误,字符串里面的 (i+1) 不会自动计算,你需要先拼接出正确的文件名并保存到字符串中,再通过 loadimage 加载文件。

针对你所用的 VC6,可以这样批量加载并显示图片 (E:\images\img-1.png、E:\images\img-2.png、E:\images\img-3.png):

#include <graphics.h>
#include <conio.h>
#include <stdio.h>

int main()
{
	initgraph(640,480);

	IMAGE img[3];	// 图像数组
	char s[100];	// 文件名字符串

	for (int i = 0; i < 3; i++)
	{
		sprintf(s, "E:\\images\\img-%d.png", i + 1);	// 根据数字生成文件名
		loadimage(&img[i], s);							// 加载图像文件
		putimage(100 + i * 100, 50, &img[i]);			// 显示图像
	}

	_getch();
	closegraph();

	return 0;
}

VC6 过于久远了,建议使用更高版本的 VC。对于高版本的 VC,推荐使用 unicode 字符串,代码调整如下:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>

int main()
{
	initgraph(640,480);

	IMAGE img[3];	// 图像数组
	wchar_t s[100];	// 文件名字符串

	for (int i = 0; i < 3; i++)
	{
		_swprintf(s, L"E:\\images\\img-%d.png", i + 1);	// 根据数字生成文件名
		loadimage(&img[i], s);							// 加载图像文件
		putimage(100 + i * 100, 50, &img[i]);			// 显示图像
	}

	_getch();
	closegraph();

	return 0;
}

第二个问题,使用图像对象初始化二维数组,可以像普通二维数组初始化一样写,例如:

#include <graphics.h>
#include <conio.h>

int main()
{
	initgraph(640, 480);

	IMAGE img1, img2, img3, img4;
	loadimage(&img1, _T("E:\\images\\img-1.png"));
	loadimage(&img2, _T("E:\\images\\img-2.png"));
	loadimage(&img3, _T("E:\\images\\img-3.png"));
	loadimage(&img4, _T("E:\\images\\img-4.png"));

	// 用多个 IMAGE 对象初始化二维数组
	IMAGE img[2][2] = { img1, img2, img3, img4 };

	// 测试输出
	putimage(100, 200, &img[0][0]);
	putimage(150, 200, &img[0][1]);

	_getch();
	closegraph();

	return 0;
}
ava
慢羊羊

2019-12-5

技术讨论社区