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

📄 tif_fax3.h

📁 一个国人自己实现图像库的程序(有参考价值)
💻 H
📖 第 1 页 / 共 2 页
字号:
		break;							\	    ClrBits(1);							\	}								\    }									\    for (;;) {								\	NeedBits8(8,eoflab);						\	if (GetBits(8))							\	    break;							\	ClrBits(8);							\    }									\    while (GetBits(1) == 0)						\	ClrBits(1);							\    ClrBits(1);				/* EOL bit */			\    EOLcnt = 0;				/* reset EOL counter/flag */	\} while (0)/* * Cleanup the array of runs after decoding a row. * We adjust final runs to insure the user buffer is not * overwritten and/or undecoded area is white filled. */#define	CLEANUP_RUNS() do {						\    if (RunLength)							\	SETVAL(0);							\    if (a0 != lastx) {							\	badlength(a0, lastx);						\	while (a0 > lastx && pa > thisrun)				\	    a0 -= *--pa;						\	if (a0 < lastx) {						\	    if (a0 < 0)							\		a0 = 0;							\	    if ((pa-thisrun)&1)						\		SETVAL(0);						\	    SETVAL(lastx - a0);						\	} else if (a0 > lastx) {					\	    SETVAL(lastx);						\	    SETVAL(0);							\	}								\    }									\} while (0)/* * Decode a line of 1D-encoded data. * * The line expanders are written as macros so that they can be reused * but still have direct access to the local variables of the "calling" * function. * * Note that unlike the original version we have to explicitly test for * a0 >= lastx after each black/white run is decoded.  This is because * the original code depended on the input data being zero-padded to * insure the decoder recognized an EOL before running out of data. */#define EXPAND1D(eoflab) do {						\    for (;;) {								\	for (;;) {							\	    LOOKUP16(12, TIFFFaxWhiteTable, eof1d);			\	    switch (TabEnt->State) {					\	    case S_EOL:							\		EOLcnt = 1;						\		goto done1d;						\	    case S_TermW:						\		SETVAL(TabEnt->Param);					\		goto doneWhite1d;					\	    case S_MakeUpW:						\	    case S_MakeUp:						\		a0 += TabEnt->Param;					\		RunLength += TabEnt->Param;				\		break;							\	    default:							\		unexpected("WhiteTable", a0);				\		goto done1d;						\	    }								\	}								\    doneWhite1d:							\	if (a0 >= lastx)						\	    goto done1d;						\	for (;;) {							\	    LOOKUP16(13, TIFFFaxBlackTable, eof1d);			\	    switch (TabEnt->State) {					\	    case S_EOL:							\		EOLcnt = 1;						\		goto done1d;						\	    case S_TermB:						\		SETVAL(TabEnt->Param);					\		goto doneBlack1d;					\	    case S_MakeUpB:						\	    case S_MakeUp:						\		a0 += TabEnt->Param;					\		RunLength += TabEnt->Param;				\		break;							\	    default:							\		unexpected("BlackTable", a0);				\		goto done1d;						\	    }								\	}								\    doneBlack1d:							\	if (a0 >= lastx)						\	    goto done1d;						\        if( *(pa-1) == 0 && *(pa-2) == 0 )				\            pa -= 2;                                                    \    }									\eof1d:									\    prematureEOF(a0);							\    CLEANUP_RUNS();							\    goto eoflab;							\done1d:									\    CLEANUP_RUNS();							\} while (0)/* * Update the value of b1 using the array * of runs for the reference line. */#define CHECK_b1 do {							\    if (pa != thisrun) while (b1 <= a0 && b1 < lastx) {			\	b1 += pb[0] + pb[1];						\	pb += 2;							\    }									\} while (0)/* * Expand a row of 2D-encoded data. */#define EXPAND2D(eoflab) do {						\    while (a0 < lastx) {						\	LOOKUP8(7, TIFFFaxMainTable, eof2d);				\	switch (TabEnt->State) {					\	case S_Pass:							\	    CHECK_b1;							\	    b1 += *pb++;						\	    RunLength += b1 - a0;					\	    a0 = b1;							\	    b1 += *pb++;						\	    break;							\	case S_Horiz:							\	    if ((pa-thisrun)&1) {					\		for (;;) {	/* black first */			\		    LOOKUP16(13, TIFFFaxBlackTable, eof2d);		\		    switch (TabEnt->State) {				\		    case S_TermB:					\			SETVAL(TabEnt->Param);				\			goto doneWhite2da;				\		    case S_MakeUpB:					\		    case S_MakeUp:					\			a0 += TabEnt->Param;				\			RunLength += TabEnt->Param;			\			break;						\		    default:						\			goto badBlack2d;				\		    }							\		}							\	    doneWhite2da:;						\		for (;;) {	/* then white */			\		    LOOKUP16(12, TIFFFaxWhiteTable, eof2d);		\		    switch (TabEnt->State) {				\		    case S_TermW:					\			SETVAL(TabEnt->Param);				\			goto doneBlack2da;				\		    case S_MakeUpW:					\		    case S_MakeUp:					\			a0 += TabEnt->Param;				\			RunLength += TabEnt->Param;			\			break;						\		    default:						\			goto badWhite2d;				\		    }							\		}							\	    doneBlack2da:;						\	    } else {							\		for (;;) {	/* white first */			\		    LOOKUP16(12, TIFFFaxWhiteTable, eof2d);		\		    switch (TabEnt->State) {				\		    case S_TermW:					\			SETVAL(TabEnt->Param);				\			goto doneWhite2db;				\		    case S_MakeUpW:					\		    case S_MakeUp:					\			a0 += TabEnt->Param;				\			RunLength += TabEnt->Param;			\			break;						\		    default:						\			goto badWhite2d;				\		    }							\		}							\	    doneWhite2db:;						\		for (;;) {	/* then black */			\		    LOOKUP16(13, TIFFFaxBlackTable, eof2d);		\		    switch (TabEnt->State) {				\		    case S_TermB:					\			SETVAL(TabEnt->Param);				\			goto doneBlack2db;				\		    case S_MakeUpB:					\		    case S_MakeUp:					\			a0 += TabEnt->Param;				\			RunLength += TabEnt->Param;			\			break;						\		    default:						\			goto badBlack2d;				\		    }							\		}							\	    doneBlack2db:;						\	    }								\	    CHECK_b1;							\	    break;							\	case S_V0:							\	    CHECK_b1;							\	    SETVAL(b1 - a0);						\	    b1 += *pb++;						\	    break;							\	case S_VR:							\	    CHECK_b1;							\	    SETVAL(b1 - a0 + TabEnt->Param);				\	    b1 += *pb++;						\	    break;							\	case S_VL:							\	    CHECK_b1;							\	    SETVAL(b1 - a0 - TabEnt->Param);				\	    b1 -= *--pb;						\	    break;							\	case S_Ext:							\	    *pa++ = lastx - a0;						\	    extension(a0);						\	    goto eol2d;							\	case S_EOL:							\	    *pa++ = lastx - a0;						\	    NeedBits8(4,eof2d);						\	    if (GetBits(4))						\		unexpected("EOL", a0);					\            ClrBits(4);                                                 \	    EOLcnt = 1;							\	    goto eol2d;							\	default:							\	badMain2d:							\	    unexpected("MainTable", a0);				\	    goto eol2d;							\	badBlack2d:							\	    unexpected("BlackTable", a0);				\	    goto eol2d;							\	badWhite2d:							\	    unexpected("WhiteTable", a0);				\	    goto eol2d;							\	eof2d:								\	    prematureEOF(a0);						\	    CLEANUP_RUNS();						\	    goto eoflab;						\	}								\    }									\    if (RunLength) {							\	if (RunLength + a0 < lastx) {					\	    /* expect a final V0 */					\	    NeedBits8(1,eof2d);						\	    if (!GetBits(1))						\		goto badMain2d;						\	    ClrBits(1);							\	}								\	SETVAL(0);							\    }									\eol2d:									\    CLEANUP_RUNS();							\} while (0)#endif /* _FAX3_ */

⌨️ 快捷键说明

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