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

📄 pngpalstrip.c

📁 神龙卡开发原代码
💻 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];}#define BUFSIZE 64*1024int main(int argc, char *argv[]){	char *buf;	int fd,r;	unsigned long cl;	unsigned long ct;	off_t chunkstart;	if(argc<2) {		fprintf(stderr,"usage %s filename.png\n",argv[0]);		return 1;	}	fprintf(stderr,"%s %s\n",argv[0],argv[1]);	buf=(char *)malloc(BUFSIZE);	if(buf==NULL)		return 1;	fd=open(argv[1], O_RDWR);	if(fd==-1){		perror("Cannot open file");		return 1;	}	//skip PNG signature;	chunkstart=lseek(fd, 8, SEEK_SET);	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");						// Seek to next Chunk			// (skip cl data bytes +4 bytes for crc)				lseek(fd, cl+4, SEEK_CUR);			r=read(fd, buf, BUFSIZE);			if(r==BUFSIZE) {				printf("Error: file size after Palette "				       "larger than BUFSIZE (%d Bytes)\n",				       BUFSIZE);			} else {				ftruncate(fd, chunkstart);				lseek(fd, 0, SEEK_END);				write(fd, buf, r);			       			}			break;		}		fprintf(stderr,"Chunk is %c%c%c%c len=%lx\n",		       (char)ct>>24, (char)ct>>16, (char)ct>>8, (char)ct, cl);		chunkstart=lseek(fd, cl+4, SEEK_CUR);			} while(1);			close(fd);	return 0;}

⌨️ 快捷键说明

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