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

📄 ycbcr.c

📁 Creating YCbCr palette to make the linux frame buffer pallette.
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct YCbCr_Pixel_t{
	unsigned char Cr;
	unsigned char Cb;
	unsigned char Y;
	unsigned char dummy;
}YCBCR_PIXEL;

typedef struct RGB_Pixel_t{
	unsigned char dummy;
	unsigned char R;
	unsigned char G;
	unsigned char B;
}RGB_PIXEL;

#define PALETTE_MAX 256

int main(void)
{
	int i,j,dataLen;
	FILE *fp;
	char fileName[256];
	YCBCR_PIXEL YCbCrTbl[PALETTE_MAX];
	RGB_PIXEL RGBTbl[PALETTE_MAX];

	dataLen = PALETTE_MAX;
	//Clean destination
	memset((void *)&YCbCrTbl, 0x00, sizeof(YCbCrTbl));

	//Creating RGB table
	for(i=0;i<PALETTE_MAX/8/4;i++){
		for(j=0;j<4*8;j++){
			RGBTbl[(i*4*8)+j].R = (i*0x20)%PALETTE_MAX;
		}
	}
	for(i=0;i<PALETTE_MAX/4;i++){
		for(j=0;j<4;j++){
			RGBTbl[(i*4)+j].G = (i*0x20)%PALETTE_MAX;
		}
	}
	for(i=0;i<PALETTE_MAX;i++){
		RGBTbl[i].B = (i*0x40)%PALETTE_MAX;
	}

	//Creating YCbCr table
	for(i=0;i<PALETTE_MAX;i++){
		double Y, Cb, Cr, R, G, B;
		R=(double)RGBTbl[i].R;
		G=(double)RGBTbl[i].G;
		B=(double)RGBTbl[i].B;
		Y=0.257*R+0.504*G+0.098*B+16;
		Cb=-0.148*R-0.291*G+0.439*B+128;
		Cr=0.439*R-0.368*G-0.071*B+128;
		YCbCrTbl[i].Y = (unsigned char)Y;
		YCbCrTbl[i].Cb = (unsigned char)Cb;
		YCbCrTbl[i].Cr = (unsigned char)Cr;
	}


	/*Enter output profile*/
	printf("Enter output file name:");
	scanf("%s", fileName);

	/*Output file operation*/
	fp = fopen(fileName, "wb+");
	if(fp == NULL)	goto ABNORMAL_TERMINATE_WITHOUT_FILE_CLOSE;

	fprintf(fp, "/* \n");
	fprintf(fp, "** FILE : %s \n", fileName);
	fprintf(fp, "** GENERATOR : %s build at %s %s \n", __FILE__, __DATE__, __TIME__);
	fprintf(fp, "** AUTHOR : Louis Lee \n");
	fprintf(fp, "*/ \n");
	fprintf(fp, "const char stubData[]={");
	fprintf(fp, "\n    {");
	i=0;

	while(i<dataLen){
		if(!(i % 16)){
			fprintf(fp, "\n    ");
		}
		fprintf(fp, "0x%08x", (unsigned int)*(unsigned int *)(&YCbCrTbl[i])); 
		if(i != dataLen - 1){
			fprintf(fp, ",");
		}
		fprintf(fp, " ");
		i++;
	};
	fprintf(fp, "}, %d\n", PALETTE_MAX);
	fprintf(fp, "};\n");

	printf("\nFile %s generated..\n", fileName);
	fclose(fp);

ABNORMAL_TERMINATE_WITHOUT_FILE_CLOSE:
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -