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

📄 wtcomp.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//* WTCOMP: $Revision: 1.4 $ ; $Date: 1997/06/30 20:26:15 $	*/#include "comp.h"/*********************** self documentation **********************/char *sdoc[] = {"									"," WTCOMP - Compression by Wavelet Transform				","									","   wtcomp < stdin n1= n2=   [optional parameter] > sdtout		","									"," Required Parameters:							"," n1=			number of samples in the fast (first) dimension	"," n2=			number of samples in the slow (second) dimension"," Optional Parameters:							"," nstage1=		number of stages (set automatically based on n1)"," nstage2=		number of stages (set automatically based on n2)"," nfilter=11		number of filters				"," error=0.01		acceptable error				","									",NULL};/* * Author: CWP: Tong Chen,   Dec 1995 *//**************** end self doc ********************************/intmain(int argc, char **argv){	int i1, i2, n1, n2, npad1, npad2;	int npow1, npow2, nstage1, nstage2, nfilter, nsize;	float **f, **g;	waveFilter *filter;	float error, ave, step;	int *qx;	memBUFF *ibuff, *obuff;		initargs(argc, argv);	requestdoc(1);	/* get the parameters */	if(!getparint("n1",&n1)) err("Must specify n1\n");	if(!getparint("n2",&n2)) err("Must specify n2\n");	if(!getparint("nfilter",&nfilter)) nfilter=11;	if(!getparfloat("error",&error)) error=.01;		/* regular sizes */	if(n1==1)	{	   npow1 = 0;	   npad1 = 1;	}	else 	{	   npow1 = 0; while(((n1-1)>>npow1)!=0) npow1 ++;	   npad1 = 1<<npow1;	}	if(n2==1)	{	   npow2 = 0;	   npad2 = 1;	}	else 	{	   npow2 = 0; while(((n2-1)>>npow2)!=0) npow2 ++;	   npad2 = 1<<npow2;	}	if(!getparint("nstage1",&nstage1)) nstage1=npow1;	if(!getparint("nstage2",&nstage2)) nstage2=npow2;	/* allocate space */	f = alloc2float(npad1,npad2);	g = alloc2float(npad1,npad2);	qx = alloc1int(npad1*npad2);		/* filter to use */	filter = waveGetfilter(nfilter);	/* input data */	for(i2=0; i2<n2; i2++)	{	   fread(f[i2],sizeof(float),n1,stdin);	   /* pad with zeroes */	   for(i1=n1; i1<npad1; i1++)	   f[i2][i1] = 0.;	}		/* pad with dead traces */	for(i2=n2; i2<npad2; i2++)	   for(i1=0; i1<npad1; i1++)	      f[i2][i1] = 0.;	/* peform the transform */	waveTrans_2(f, g, filter, npow1, npow2, 		   nstage1, nstage2, 0);		/* quantization */	step = -1.;	uniQuant(g[0], npad1*npad2, error, &ave, &step, qx);	/* prefix encoding */	ibuff = pEncode(qx, npad1*npad2);	/* allocate out buffer */	obuff = buffAlloc1(ibuff->mbound);	/* rewind the in buffer */	buffRewind(ibuff);		/* run-length coding */	codeSilence(ibuff, obuff);		/* Huffman coding */	buffRealloc1(obuff, obuff->pos);	buffRewind(obuff);	buffRewind(ibuff);	nsize = huffCompress(obuff, ibuff);		fprintf(stderr,"size after compression = %d bytes\n", nsize);	fprintf(stderr,"compression ratio = %f\n", 		(float)n1*n2*sizeof(int)/nsize);	fwrite(&nsize, sizeof(int), 1, stdout);	fwrite(&n1, sizeof(int), 1, stdout);	fwrite(&n2, sizeof(int), 1, stdout);	fwrite(&nfilter, sizeof(int), 1, stdout);	fwrite(&nstage1, sizeof(int), 1, stdout);	fwrite(&nstage2, sizeof(int), 1, stdout);	fwrite(&ave, sizeof(float), 1, stdout);	fwrite(&step, sizeof(float), 1, stdout);	fwrite(ibuff->code, sizeof(char), ibuff->pos, stdout);/*	fprintf(stderr,"size after compression = %d bytes\n", obuff->pos);	fwrite(obuff->code, sizeof(char), obuff->pos, stdout);*/		return EXIT_SUCCESS;}

⌨️ 快捷键说明

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