欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

二、代码实现YUV420图像的水平拼接

最编程 2024-08-15 16:38:01
...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	FILE *file = NULL;
	FILE *yuv1 = NULL;
	FILE *yuv2 = NULL;

	int imgWidth = 1920;
	int imgHeight = 1080;
	int i = 0;

	char filename[64] = {0};
	snprintf(filename, sizeof(filename), "/out.yuv");

	//拼接后的yuv文件
	file = fopen(filename, "w+");
	if (NULL == file)
		return -1;
	
	//拼接前的yuv图像1
	yuv1 = fopen("/yuv001.yuv", "r");
	if (NULL == yuv1)
		return -1;
	
	//拼接前的yuv图像2
	yuv2 = fopen("/yuv002.yuv", "r");
	if (NULL == yuv1)
		return -1;

	char *imgY1, *imgY2;

	//开辟内存
	imgY1 = (char *)malloc(imgWidth * imgHeight * 3 / 2);		//yuv420
	if(NULL == imgY1)
		return -1;
	
	imgY2 = (char *)malloc(imgWidth * imgHeight * 3 /2);		//yuv420
	if(NULL == imgY1)
		return -1;

	//读取拼接前的两张yuv图像数据
	if((imgWidth * imgHeight *3 / 2) != fread(imgY1, 1, imgWidth * imgHeight * 3 / 2, yuv1))
		return -1;
	
	if((imgWidth * imgHeight *3 / 2) != fread(imgY2, 1, imgWidth * imgHeight * 3 / 2, yuv2))
		return -1;

	//水平拼接yuv420
	for (i = 0; i < imgHeight; i++)
	{
		fwrite(imgY1, 1, imgWidth*3/2, file);
		fwrite(imgY2, 1, imgWidth*3/2, file);
		imgY1 += imgWidth*3/2;
		imgY2 += imgWidth*3/2;
	}

	return 0;
}

推荐阅读