最终实现图:
左右拼接
上下拼接
实现思路:
这左右上下拼接思路与前面的横向纵向显示 思路差不多 ,甚至更简单就不多说了(不了解请移步)。
代码编写
/*图片左右拼接*/
int LUX_YUV_ColorSplice(char *file1,char *file2)
{
int Ret = 0;
int height = 0;
int yuvSize = LUX_Y_ALL_SIZE * 3;
const int yAddSize = 1920;
const int uvAddSize = 960;
const int yAllSize = 1080*3840;
const int yWidthSize = 3840;
const int uvWidthSize = 1920;
char *pOneFileData = NULL;
char *ptwoFileData = NULL;
char *pOverFileData = NULL;
pOneFileData =(char *)malloc(LUX_Y_ALL_SIZE*3/2);
ptwoFileData =(char *)malloc(LUX_Y_ALL_SIZE*3/2);
pOverFileData =(char *)malloc(LUX_Y_ALL_SIZE*3);
Ret = LUX_Open_file(pOneFileData,file1);
if (-1 == Ret)
{
printf("LUX_Open_one_file fail\n");
return -1;
}
Ret = LUX_Open_file(ptwoFileData,file2);
if (-1 == Ret)
{
printf("LUX_Open_two_file fail\n");
return -2;
}
for (height = 0;height < 1080;height++)
{
memcpy(pOverFileData + (height*yWidthSize) ,pOneFileData + height*yAddSize ,yAddSize);
memcpy(pOverFileData + yAddSize + (height*yWidthSize) ,ptwoFileData+height*yAddSize ,yAddSize);
memcpy(pOverFileData + yAllSize + height*uvWidthSize ,
pOneFileData + LUX_Y_ALL_SIZE + height*uvAddSize ,uvAddSize);
memcpy(pOverFileData + yAllSize + uvAddSize + height*uvWidthSize ,
ptwoFileData + LUX_Y_ALL_SIZE + height*uvAddSize ,uvAddSize);
}
Ret = LUX_file_make(yuvSize,pOverFileData,LUX_YUV_File_Name_Splice);
if(-1 == Ret)
{
printf("LUX_file_make fail");
return -2;
}
free(pOneFileData);
free(ptwoFileData);
free(pOverFileData);
return 0;
}
/*图片上下拼接*/
int LUX_YUV_ColorSpliceUpDowm(char *file1,char *file2)
{
int Ret = 0;
int height = 0;
int yuvSize = 2160*1920*3;
int pictureNum = 0;
const int yAllSize = 2160*1920;
const int uAllSize = 540*960;
const int vAllSize = 540*960;
const int yuAllSize = 2160*1920*5/4;
char *pOneFileData = NULL;
char *ptwoFileData = NULL;
char *pOverFileData = NULL;
pOneFileData =(char *)malloc(LUX_Y_ALL_SIZE*3/2);
ptwoFileData =(char *)malloc(LUX_Y_ALL_SIZE*3/2);
pOverFileData =(char *)malloc(LUX_Y_ALL_SIZE*3);
Ret = LUX_Open_file(pOneFileData,file1);
if (-1 == Ret)
{
printf("LUX_Open_one_file fail\n");
return -1;
}
Ret = LUX_Open_file(ptwoFileData,file2);
if (-1 == Ret)
{
printf("LUX_Open_two_file fail\n");
return -2;
}
/*画第一张图*/
memcpy(pOverFileData ,pOneFileData ,LUX_Y_ALL_SIZE);
memcpy(pOverFileData + yAllSize ,pOneFileData + LUX_Y_ALL_SIZE ,uAllSize);
memcpy(pOverFileData + yuAllSize ,pOneFileData + LUX_YU_ALL_SIZE ,vAllSize);
/*画第二张图*/
memcpy(pOverFileData + LUX_Y_ALL_SIZE,ptwoFileData ,LUX_Y_ALL_SIZE);
memcpy(pOverFileData + yAllSize + uAllSize,ptwoFileData + LUX_Y_ALL_SIZE ,uAllSize);
memcpy(pOverFileData + yuAllSize + vAllSize,ptwoFileData + LUX_YU_ALL_SIZE ,vAllSize);
Ret = LUX_file_make(yuvSize,pOverFileData,LUX_YUV_File_Name_point);
if(-1 == Ret)
{
printf("LUX_file_make fail");
return -2;
}
free(pOneFileData);
free(ptwoFileData);
free(pOverFileData);
return 0;
}
注:整个工程在最后一起上传。