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

📄 jas_icc.c

📁 DIGITAL IMAGERY is pervasive in our world today. Consequently, standards for the efficient represen
💻 C
📖 第 1 页 / 共 4 页
字号:
	  jas_iccgetuint8(in, &lut8->clutlen) ||	  jas_stream_getc(in) == EOF)		goto error;	for (i = 0; i < 3; ++i) {		for (j = 0; j < 3; ++j) {			if (jas_iccgetsint32(in, &lut8->e[i][j]))				goto error;		}	}	if (jas_iccgetuint16(in, &lut8->numintabents) ||	  jas_iccgetuint16(in, &lut8->numouttabents))		goto error;	clutsize = jas_iccpowi(lut8->clutlen, lut8->numinchans) * lut8->numoutchans;	if (!(lut8->clut = jas_malloc(clutsize * sizeof(jas_iccuint8_t))) ||	  !(lut8->intabsbuf = jas_malloc(lut8->numinchans *	  lut8->numintabents * sizeof(jas_iccuint8_t))) ||	  !(lut8->intabs = jas_malloc(lut8->numinchans *	  sizeof(jas_iccuint8_t *))))		goto error;	for (i = 0; i < lut8->numinchans; ++i)		lut8->intabs[i] = &lut8->intabsbuf[i * lut8->numintabents];	if (!(lut8->outtabsbuf = jas_malloc(lut8->numoutchans *	  lut8->numouttabents * sizeof(jas_iccuint8_t))) ||	  !(lut8->outtabs = jas_malloc(lut8->numoutchans *	  sizeof(jas_iccuint8_t *))))		goto error;	for (i = 0; i < lut8->numoutchans; ++i)		lut8->outtabs[i] = &lut8->outtabsbuf[i * lut8->numouttabents];	for (i = 0; i < lut8->numinchans; ++i) {		for (j = 0; j < JAS_CAST(int, lut8->numintabents); ++j) {			if (jas_iccgetuint8(in, &lut8->intabs[i][j]))				goto error;		}	}	for (i = 0; i < lut8->numoutchans; ++i) {		for (j = 0; j < JAS_CAST(int, lut8->numouttabents); ++j) {			if (jas_iccgetuint8(in, &lut8->outtabs[i][j]))				goto error;		}	}	for (i = 0; i < clutsize; ++i) {		if (jas_iccgetuint8(in, &lut8->clut[i]))			goto error;	}	if (JAS_CAST(int, 44 + lut8->numinchans * lut8->numintabents +	  lut8->numoutchans * lut8->numouttabents +	  jas_iccpowi(lut8->clutlen, lut8->numinchans) * lut8->numoutchans) !=	  cnt)		goto error;	return 0;error:	jas_icclut8_destroy(attrval);	return -1;}static int jas_icclut8_getsize(jas_iccattrval_t *attrval){	jas_icclut8_t *lut8 = &attrval->data.lut8;	return 44 + lut8->numinchans * lut8->numintabents +	  lut8->numoutchans * lut8->numouttabents +	  jas_iccpowi(lut8->clutlen, lut8->numinchans) * lut8->numoutchans;}static int jas_icclut8_output(jas_iccattrval_t *attrval, jas_stream_t *out){	jas_icclut8_t *lut8 = &attrval->data.lut8;	int i;	int j;	int n;	lut8->clut = 0;	lut8->intabs = 0;	lut8->intabsbuf = 0;	lut8->outtabs = 0;	lut8->outtabsbuf = 0;	if (jas_stream_putc(out, lut8->numinchans) == EOF ||	  jas_stream_putc(out, lut8->numoutchans) == EOF ||	  jas_stream_putc(out, lut8->clutlen) == EOF ||	  jas_stream_putc(out, 0) == EOF)		goto error;	for (i = 0; i < 3; ++i) {		for (j = 0; j < 3; ++j) {			if (jas_iccputsint32(out, lut8->e[i][j]))				goto error;		}	}	if (jas_iccputuint16(out, lut8->numintabents) ||	  jas_iccputuint16(out, lut8->numouttabents))		goto error;	n = lut8->numinchans * lut8->numintabents;	for (i = 0; i < n; ++i) {		if (jas_iccputuint8(out, lut8->intabsbuf[i]))			goto error;	}	n = lut8->numoutchans * lut8->numouttabents;	for (i = 0; i < n; ++i) {		if (jas_iccputuint8(out, lut8->outtabsbuf[i]))			goto error;	}	n = jas_iccpowi(lut8->clutlen, lut8->numinchans) * lut8->numoutchans;	for (i = 0; i < n; ++i) {		if (jas_iccputuint8(out, lut8->clut[i]))			goto error;	}	return 0;error:	return -1;}static void jas_icclut8_dump(jas_iccattrval_t *attrval, FILE *out){	jas_icclut8_t *lut8 = &attrval->data.lut8;	int i;	int j;	fprintf(out, "numinchans=%d, numoutchans=%d, clutlen=%d\n",	  lut8->numinchans, lut8->numoutchans, lut8->clutlen);	for (i = 0; i < 3; ++i) {		for (j = 0; j < 3; ++j) {			fprintf(out, "e[%d][%d]=%f ", i, j, lut8->e[i][j] / 65536.0);		}		fprintf(out, "\n");	}	fprintf(out, "numintabents=%d, numouttabents=%d\n",	  lut8->numintabents, lut8->numouttabents);}/******************************************************************************\*\******************************************************************************/static void jas_icclut16_destroy(jas_iccattrval_t *attrval){	jas_icclut16_t *lut16 = &attrval->data.lut16;	if (lut16->clut)		jas_free(lut16->clut);	if (lut16->intabs)		jas_free(lut16->intabs);	if (lut16->intabsbuf)		jas_free(lut16->intabsbuf);	if (lut16->outtabs)		jas_free(lut16->outtabs);	if (lut16->outtabsbuf)		jas_free(lut16->outtabsbuf);}static int jas_icclut16_copy(jas_iccattrval_t *attrval,  jas_iccattrval_t *othattrval){	/* Avoid compiler warnings about unused parameters. */	attrval = 0;	othattrval = 0;	/* Not yet implemented. */	abort();	return -1;}static int jas_icclut16_input(jas_iccattrval_t *attrval, jas_stream_t *in,  int cnt){	int i;	int j;	int clutsize;	jas_icclut16_t *lut16 = &attrval->data.lut16;	lut16->clut = 0;	lut16->intabs = 0;	lut16->intabsbuf = 0;	lut16->outtabs = 0;	lut16->outtabsbuf = 0;	if (jas_iccgetuint8(in, &lut16->numinchans) ||	  jas_iccgetuint8(in, &lut16->numoutchans) ||	  jas_iccgetuint8(in, &lut16->clutlen) ||	  jas_stream_getc(in) == EOF)		goto error;	for (i = 0; i < 3; ++i) {		for (j = 0; j < 3; ++j) {			if (jas_iccgetsint32(in, &lut16->e[i][j]))				goto error;		}	}	if (jas_iccgetuint16(in, &lut16->numintabents) ||	  jas_iccgetuint16(in, &lut16->numouttabents))		goto error;	clutsize = jas_iccpowi(lut16->clutlen, lut16->numinchans) * lut16->numoutchans;	if (!(lut16->clut = jas_malloc(clutsize * sizeof(jas_iccuint16_t))) ||	  !(lut16->intabsbuf = jas_malloc(lut16->numinchans *	  lut16->numintabents * sizeof(jas_iccuint16_t))) ||	  !(lut16->intabs = jas_malloc(lut16->numinchans *	  sizeof(jas_iccuint16_t *))))		goto error;	for (i = 0; i < lut16->numinchans; ++i)		lut16->intabs[i] = &lut16->intabsbuf[i * lut16->numintabents];	if (!(lut16->outtabsbuf = jas_malloc(lut16->numoutchans *	  lut16->numouttabents * sizeof(jas_iccuint16_t))) ||	  !(lut16->outtabs = jas_malloc(lut16->numoutchans *	  sizeof(jas_iccuint16_t *))))		goto error;	for (i = 0; i < lut16->numoutchans; ++i)		lut16->outtabs[i] = &lut16->outtabsbuf[i * lut16->numouttabents];	for (i = 0; i < lut16->numinchans; ++i) {		for (j = 0; j < JAS_CAST(int, lut16->numintabents); ++j) {			if (jas_iccgetuint16(in, &lut16->intabs[i][j]))				goto error;		}	}	for (i = 0; i < lut16->numoutchans; ++i) {		for (j = 0; j < JAS_CAST(int, lut16->numouttabents); ++j) {			if (jas_iccgetuint16(in, &lut16->outtabs[i][j]))				goto error;		}	}	for (i = 0; i < clutsize; ++i) {		if (jas_iccgetuint16(in, &lut16->clut[i]))			goto error;	}	if (JAS_CAST(int, 44 + 2 * (lut16->numinchans * lut16->numintabents +          lut16->numoutchans * lut16->numouttabents +          jas_iccpowi(lut16->clutlen, lut16->numinchans) *	  lut16->numoutchans)) != cnt)		goto error;	return 0;error:	jas_icclut16_destroy(attrval);	return -1;}static int jas_icclut16_getsize(jas_iccattrval_t *attrval){	jas_icclut16_t *lut16 = &attrval->data.lut16;	return 44 + 2 * (lut16->numinchans * lut16->numintabents +	  lut16->numoutchans * lut16->numouttabents +	  jas_iccpowi(lut16->clutlen, lut16->numinchans) * lut16->numoutchans);}static int jas_icclut16_output(jas_iccattrval_t *attrval, jas_stream_t *out){	jas_icclut16_t *lut16 = &attrval->data.lut16;	int i;	int j;	int n;	if (jas_stream_putc(out, lut16->numinchans) == EOF ||	  jas_stream_putc(out, lut16->numoutchans) == EOF ||	  jas_stream_putc(out, lut16->clutlen) == EOF ||	  jas_stream_putc(out, 0) == EOF)		goto error;	for (i = 0; i < 3; ++i) {		for (j = 0; j < 3; ++j) {			if (jas_iccputsint32(out, lut16->e[i][j]))				goto error;		}	}	if (jas_iccputuint16(out, lut16->numintabents) ||	  jas_iccputuint16(out, lut16->numouttabents))		goto error;	n = lut16->numinchans * lut16->numintabents;	for (i = 0; i < n; ++i) {		if (jas_iccputuint16(out, lut16->intabsbuf[i]))			goto error;	}	n = lut16->numoutchans * lut16->numouttabents;	for (i = 0; i < n; ++i) {		if (jas_iccputuint16(out, lut16->outtabsbuf[i]))			goto error;	}	n = jas_iccpowi(lut16->clutlen, lut16->numinchans) * lut16->numoutchans;	for (i = 0; i < n; ++i) {		if (jas_iccputuint16(out, lut16->clut[i]))			goto error;	}	return 0;error:	return -1;}static void jas_icclut16_dump(jas_iccattrval_t *attrval, FILE *out){	jas_icclut16_t *lut16 = &attrval->data.lut16;	int i;	int j;	fprintf(out, "numinchans=%d, numoutchans=%d, clutlen=%d\n",	  lut16->numinchans, lut16->numoutchans, lut16->clutlen);	for (i = 0; i < 3; ++i) {		for (j = 0; j < 3; ++j) {			fprintf(out, "e[%d][%d]=%f ", i, j, lut16->e[i][j] / 65536.0);		}		fprintf(out, "\n");	}	fprintf(out, "numintabents=%d, numouttabents=%d\n",	  lut16->numintabents, lut16->numouttabents);}/******************************************************************************\*\******************************************************************************/static int jas_iccgetuint(jas_stream_t *in, int n, ulonglong *val){	int i;	int c;	ulonglong v;	v = 0;	for (i = n; i > 0; --i) {		if ((c = jas_stream_getc(in)) == EOF)			return -1;		v = (v << 8) | c;	}	*val = v;	return 0;}static int jas_iccgetuint8(jas_stream_t *in, jas_iccuint8_t *val){	int c;	if ((c = jas_stream_getc(in)) == EOF)		return -1;	*val = c;	return 0;}static int jas_iccgetuint16(jas_stream_t *in, jas_iccuint16_t *val){	ulonglong tmp;	if (jas_iccgetuint(in, 2, &tmp))		return -1;	*val = tmp;	return 0;}static int jas_iccgetsint32(jas_stream_t *in, jas_iccsint32_t *val){	ulonglong tmp;	if (jas_iccgetuint(in, 4, &tmp))		return -1;	*val = (tmp & 0x80000000) ? (-JAS_CAST(longlong, (((~tmp) &	  0x7fffffff) + 1))) : JAS_CAST(longlong, tmp);	return 0;}static int jas_iccgetuint32(jas_stream_t *in, jas_iccuint32_t *val){	ulonglong tmp;	if (jas_iccgetuint(in, 4, &tmp))		return -1;	*val = tmp;	return 0;}static int jas_iccgetuint64(jas_stream_t *in, jas_iccuint64_t *val){	ulonglong tmp;	if (jas_iccgetuint(in, 8, &tmp))		return -1;	*val = tmp;	return 0;}static int jas_iccputuint(jas_stream_t *out, int n, ulonglong val){	int i;	int c;	for (i = n; i > 0; --i) {		c = (val >> (8 * (i - 1))) & 0xff;		if (jas_stream_putc(out, c) == EOF)			return -1;	}	return 0;}static int jas_iccputsint(jas_stream_t *out, int n, longlong val){	ulonglong tmp;	tmp = (val < 0) ? (abort(), 0) : val;	return jas_iccputuint(out, n, tmp);}/******************************************************************************\*\******************************************************************************/static char *jas_iccsigtostr(int sig, char *buf){	int n;	int c;	char *bufptr;	bufptr = buf;	for (n = 4; n > 0; --n) {		c = (sig >> 24) & 0xff;		if (isalpha(c) || isdigit(c)) {			*bufptr++ = c;		}		sig <<= 8;	}	*bufptr = '\0';	return buf;}static long jas_iccpadtomult(long x, long y){	return ((x + y - 1) / y) * y;}static long jas_iccpowi(int x, int n){	long y;	y = 1;	while (--n >= 0)		y *= x;	return y;}jas_iccprof_t *jas_iccprof_createfrombuf(uchar *buf, int len){	jas_stream_t *in;	jas_iccprof_t *prof;	if (!(in = jas_stream_memopen(JAS_CAST(char *, buf), len)))		goto error;	if (!(prof = jas_iccprof_load(in)))		goto error;	jas_stream_close(in);	return prof;error:	return 0;}jas_iccprof_t *jas_iccprof_createfromclrspc(int clrspc){	jas_iccprof_t *prof;	switch (clrspc) {	case JAS_CLRSPC_SRGB:		prof = jas_iccprof_createfrombuf(jas_iccprofdata_srgb,		  jas_iccprofdata_srgblen);		break;	case JAS_CLRSPC_SGRAY:		prof = jas_iccprof_createfrombuf(jas_iccprofdata_sgray,		  jas_iccprofdata_sgraylen);		break;	default:		prof = 0;		break;	}	return prof;}

⌨️ 快捷键说明

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