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

📄 pngpal.c

📁 RMF-1.7.153.0-NODOLBY.tar.gz 神龙卡的驱动
💻 C
字号:
/* * gif2png : Extract palette from a PNG file * Jasper DVD player utility *  * Fabrice Gautier, (c) 2002 Sigma Designs, Inc * */#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <unistd.h>unsigned long swapl(unsigned long l){	char *p;	p=(char *)&l;	return (p[0]<<24)+(p[1]<<16)+(p[2]<<8)+p[3];}void GetPLTE(int fd, int sz){	int i;	unsigned char *pal;	if(sz%3){		fprintf(stderr,"Error PLTE len = %d, not multiple of 3\n",sz);		return;	}	pal=(char *)malloc(sz);	i=read(fd, pal, sz);	if(i!=sz) {		fprintf(stderr,"Couldnt read palette read=%d\n",i);		return;	}	printf("//PNG Palette, size= %d\n",sz);	for(i=0;i<(sz/3); i++) {		printf("RGBDEF( %3u, %3u, %3u ),\n",pal[3*i],pal[3*i+1],pal[3*i+2]);	}}int main(int argc, char *argv[]){	char *buf;	int fd,r,p;	unsigned long cl;	unsigned long ct;	if(argc<2) {		fprintf(stderr,"usage %s filename.gif\n",argv[0]);		return 1;	}	fprintf(stderr,"%s %s\n",argv[0],argv[1]);	buf=(char *)malloc(4*1024);	if(buf==NULL)		return 1;	fd=open(argv[1], O_RDONLY);	if(fd==-1){		perror("Cannot open file");		return 1;	}	lseek(fd, 8, SEEK_SET);  // skip PNG singature 	do {		// get chunk		read(fd, &cl, 4);		cl=swapl(cl);		r=read(fd, &ct, 4);		ct=swapl(ct);				if(r==-1) {			perror("Cannot read file");			return -1;		}		if(r==0) {			printf("End of file, PLTE not found\n");			break;		}		if(ct==(('P'<<24) + ('L'<<16) + ('T'<<8) +'E')) {			fprintf(stderr,"PLTE found\n");			GetPLTE(fd,cl);			break;		}		fprintf(stderr,"Chunk is %c%c%c%c len=%d\n",		       ct>>24, ct>>16, ct>>8, ct, cl);		lseek(fd, cl+4, SEEK_CUR);			} while(1);			return 0;}

⌨️ 快捷键说明

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