⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yuv_to_rgb.c

📁 dsp入门级程序
💻 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 + -