📄 yuv_to_rgb.c
字号:
/***************************************************************************/
/* */
/* YUV_TO_RGB. C */
/* */
/* Basic C standard I/O from main. */
/* */
/* */
/***************************************************************************/
#include <stdio.h>
#include "yuv_to_rgb.h"
#define BUFSIZE_Y 352*288
#define BUFSIZE_U 176*144
#define BUFSIZE_V 176*144
#define BUFSIZE BUFSIZE_Y+BUFSIZE_U+BUFSIZE_V
#define FILEIO 1
struct PARMS str =
{
2934,
9432,
213,
9432,
&str
};
/*
* ======== main ========
*/
void main()
{
#ifdef FILEIO
int i;
unsigned char fileStr[BUFSIZE];
unsigned char fileStr_Y[BUFSIZE_Y];
unsigned char fileStr_U[BUFSIZE_U];
unsigned char fileStr_V[BUFSIZE_V];
int j;
unsigned char con_Y[BUFSIZE_Y];
unsigned char con_U[BUFSIZE_Y];
unsigned char con_V[BUFSIZE_Y];
char con_R[BUFSIZE_Y];
char con_G[BUFSIZE_Y];
char con_B[BUFSIZE_Y];
float r,g,b;
size_t readSize;
size_t writeSize_R;
size_t writeSize_G;
size_t writeSize_B;
FILE *fptr;
FILE *fp;
#endif
#ifdef FILEIO
/* open a file oan the host and read char array */
fptr = fopen("d:\\akiyo_cif.yuv", "rb");
readSize = fread(fileStr, sizeof(char), BUFSIZE, fptr);
printf("Read a %d byte char array\n", readSize);
/*SOUSEFILE------>YUV_420*/
for (i = 0; i < BUFSIZE_Y; i++)
{
fileStr_Y[i] = fileStr[i];
}
for (i = 0; i < BUFSIZE_U; i++)
{
fileStr_U[i] = fileStr[i+BUFSIZE_Y];
}
for (i = 0; i < BUFSIZE_V; i++)
{
fileStr_V[i] = fileStr[i+BUFSIZE_Y+BUFSIZE_U];
}
/*YUV_420->YUV_444*/
for (i = 0; i <BUFSIZE_Y; i++)
{
con_Y[i]=fileStr_Y[i];
}
for (j = 0; j < 144 ; j++)
{
for (i = j*352; i< (j+1)*352; i++ )
{
con_U[i+j*352]=fileStr_U[i/2];
con_U[i+352*(j+1)]=fileStr_U[i/2];
con_V[i+j*352]=fileStr_V[i/2];
con_V[i+352*(j+1)]=fileStr_V[i/2];
}
}
/*YUV_444-->RGB*/
for (i = 0; i<BUFSIZE_Y; i++)
{
r = con_Y[i] + (con_V[i] - 128)*1402/1000;
g = con_Y[i] - (con_U[i] - 128)*3441/10000-(con_V[i] - 128)*7141/10000;
b = con_Y[i] + (con_U[i] - 128)*1772/1000;
if (r > 255)
r = 255;
if (g > 255)
g = 255;
if (b > 255)
b = 255;
if (r < 0 )
r = 0 ;
if (g < 0 )
g = 0 ;
if (b < 0 )
b = 0 ;
con_R[i] = r;
con_G[i] = g;
con_B[i] = b;
}
/*write rgb file*/
fp = fopen("d:\\rgb", "wb");
writeSize_R=fwrite(con_R,sizeof(char), BUFSIZE_Y, fp);
fclose(fp);
fp = fopen("d:\\rgb", "ab");
writeSize_G=fwrite(con_G,sizeof(char), BUFSIZE_Y, fp);
fclose(fp);
fp = fopen("d:\\rgb", "ab");
writeSize_B=fwrite(con_B,sizeof(char), BUFSIZE_Y, fp);
fclose(fp);
printf("Write a %d byte char array\n", writeSize_R+writeSize_G+writeSize_B);
/*CLOSE FILE*/
fclose(fptr);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -