亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tif_pixarlog.c

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* $Id: tif_pixarlog.c,v 1.15 2006/09/28 16:26:03 dron Exp $ *//* * Copyright (c) 1996-1997 Sam Leffler * Copyright (c) 1996 Pixar * * Permission to use, copy, modify, distribute, and sell this software and  * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Pixar, Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Pixar, Sam Leffler and Silicon Graphics. *  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.   *  * IN NO EVENT SHALL PIXAR, SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  * OF THIS SOFTWARE. */#include "tiffiop.h"#ifdef PIXARLOG_SUPPORT/* * TIFF Library. * PixarLog Compression Support * * Contributed by Dan McCoy. * * PixarLog film support uses the TIFF library to store companded * 11 bit values into a tiff file, which are compressed using the  * zip compressor.   * * The codec can take as input and produce as output 32-bit IEEE float values  * as well as 16-bit or 8-bit unsigned integer values. * * On writing any of the above are converted into the internal * 11-bit log format.   In the case of  8 and 16 bit values, the * input is assumed to be unsigned linear color values that represent * the range 0-1.  In the case of IEEE values, the 0-1 range is assumed to * be the normal linear color range, in addition over 1 values are * accepted up to a value of about 25.0 to encode "hot" hightlights and such. * The encoding is lossless for 8-bit values, slightly lossy for the * other bit depths.  The actual color precision should be better * than the human eye can perceive with extra room to allow for * error introduced by further image computation.  As with any quantized * color format, it is possible to perform image calculations which * expose the quantization error. This format should certainly be less  * susceptable to such errors than standard 8-bit encodings, but more * susceptable than straight 16-bit or 32-bit encodings. * * On reading the internal format is converted to the desired output format. * The program can request which format it desires by setting the internal * pseudo tag TIFFTAG_PIXARLOGDATAFMT to one of these possible values: *  PIXARLOGDATAFMT_FLOAT     = provide IEEE float values. *  PIXARLOGDATAFMT_16BIT     = provide unsigned 16-bit integer values *  PIXARLOGDATAFMT_8BIT      = provide unsigned 8-bit integer values * * alternately PIXARLOGDATAFMT_8BITABGR provides unsigned 8-bit integer * values with the difference that if there are exactly three or four channels * (rgb or rgba) it swaps the channel order (bgr or abgr). * * PIXARLOGDATAFMT_11BITLOG provides the internal encoding directly * packed in 16-bit values.   However no tools are supplied for interpreting * these values. * * "hot" (over 1.0) areas written in floating point get clamped to * 1.0 in the integer data types. * * When the file is closed after writing, the bit depth and sample format * are set always to appear as if 8-bit data has been written into it. * That way a naive program unaware of the particulars of the encoding * gets the format it is most likely able to handle. * * The codec does it's own horizontal differencing step on the coded * values so the libraries predictor stuff should be turned off. * The codec also handle byte swapping the encoded values as necessary * since the library does not have the information necessary * to know the bit depth of the raw unencoded buffer. *  */#include "tif_predict.h"#include "zlib.h"#include <stdio.h>#include <stdlib.h>#include <math.h>/* Tables for converting to/from 11 bit coded values */#define  TSIZE	 2048		/* decode table size (11-bit tokens) */#define  TSIZEP1 2049		/* Plus one for slop */#define  ONE	 1250		/* token value of 1.0 exactly */#define  RATIO	 1.004		/* nominal ratio for log part */#define CODE_MASK 0x7ff         /* 11 bits. */static float  Fltsize;static float  LogK1, LogK2;#define REPEAT(n, op)   { int i; i=n; do { i--; op; } while (i>0); }static voidhorizontalAccumulateF(uint16 *wp, int n, int stride, float *op, 	float *ToLinearF){    register unsigned int  cr, cg, cb, ca, mask;    register float  t0, t1, t2, t3;    if (n >= stride) {	mask = CODE_MASK;	if (stride == 3) {	    t0 = ToLinearF[cr = wp[0]];	    t1 = ToLinearF[cg = wp[1]];	    t2 = ToLinearF[cb = wp[2]];	    op[0] = t0;	    op[1] = t1;	    op[2] = t2;	    n -= 3;	    while (n > 0) {		wp += 3;		op += 3;		n -= 3;		t0 = ToLinearF[(cr += wp[0]) & mask];		t1 = ToLinearF[(cg += wp[1]) & mask];		t2 = ToLinearF[(cb += wp[2]) & mask];		op[0] = t0;		op[1] = t1;		op[2] = t2;	    }	} else if (stride == 4) {	    t0 = ToLinearF[cr = wp[0]];	    t1 = ToLinearF[cg = wp[1]];	    t2 = ToLinearF[cb = wp[2]];	    t3 = ToLinearF[ca = wp[3]];	    op[0] = t0;	    op[1] = t1;	    op[2] = t2;	    op[3] = t3;	    n -= 4;	    while (n > 0) {		wp += 4;		op += 4;		n -= 4;		t0 = ToLinearF[(cr += wp[0]) & mask];		t1 = ToLinearF[(cg += wp[1]) & mask];		t2 = ToLinearF[(cb += wp[2]) & mask];		t3 = ToLinearF[(ca += wp[3]) & mask];		op[0] = t0;		op[1] = t1;		op[2] = t2;		op[3] = t3;	    }	} else {	    REPEAT(stride, *op = ToLinearF[*wp&mask]; wp++; op++)	    n -= stride;	    while (n > 0) {		REPEAT(stride,		    wp[stride] += *wp; *op = ToLinearF[*wp&mask]; wp++; op++)		n -= stride;	    }	}    }}static voidhorizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op,	float *ToLinearF){    register unsigned int  cr, cg, cb, ca, mask;    register float  t0, t1, t2, t3;#define SCALE12 2048.0F#define CLAMP12(t) (((t) < 3071) ? (uint16) (t) : 3071)    if (n >= stride) {	mask = CODE_MASK;	if (stride == 3) {	    t0 = ToLinearF[cr = wp[0]] * SCALE12;	    t1 = ToLinearF[cg = wp[1]] * SCALE12;	    t2 = ToLinearF[cb = wp[2]] * SCALE12;	    op[0] = CLAMP12(t0);	    op[1] = CLAMP12(t1);	    op[2] = CLAMP12(t2);	    n -= 3;	    while (n > 0) {		wp += 3;		op += 3;		n -= 3;		t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12;		t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12;		t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12;		op[0] = CLAMP12(t0);		op[1] = CLAMP12(t1);		op[2] = CLAMP12(t2);	    }	} else if (stride == 4) {	    t0 = ToLinearF[cr = wp[0]] * SCALE12;	    t1 = ToLinearF[cg = wp[1]] * SCALE12;	    t2 = ToLinearF[cb = wp[2]] * SCALE12;	    t3 = ToLinearF[ca = wp[3]] * SCALE12;	    op[0] = CLAMP12(t0);	    op[1] = CLAMP12(t1);	    op[2] = CLAMP12(t2);	    op[3] = CLAMP12(t3);	    n -= 4;	    while (n > 0) {		wp += 4;		op += 4;		n -= 4;		t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12;		t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12;		t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12;		t3 = ToLinearF[(ca += wp[3]) & mask] * SCALE12;		op[0] = CLAMP12(t0);		op[1] = CLAMP12(t1);		op[2] = CLAMP12(t2);		op[3] = CLAMP12(t3);	    }	} else {	    REPEAT(stride, t0 = ToLinearF[*wp&mask] * SCALE12;                           *op = CLAMP12(t0); wp++; op++)	    n -= stride;	    while (n > 0) {		REPEAT(stride,		    wp[stride] += *wp; t0 = ToLinearF[wp[stride]&mask]*SCALE12;		    *op = CLAMP12(t0);  wp++; op++)		n -= stride;	    }	}    }}static voidhorizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op,	uint16 *ToLinear16){    register unsigned int  cr, cg, cb, ca, mask;    if (n >= stride) {	mask = CODE_MASK;	if (stride == 3) {	    op[0] = ToLinear16[cr = wp[0]];	    op[1] = ToLinear16[cg = wp[1]];	    op[2] = ToLinear16[cb = wp[2]];	    n -= 3;	    while (n > 0) {		wp += 3;		op += 3;		n -= 3;		op[0] = ToLinear16[(cr += wp[0]) & mask];		op[1] = ToLinear16[(cg += wp[1]) & mask];		op[2] = ToLinear16[(cb += wp[2]) & mask];	    }	} else if (stride == 4) {	    op[0] = ToLinear16[cr = wp[0]];	    op[1] = ToLinear16[cg = wp[1]];	    op[2] = ToLinear16[cb = wp[2]];	    op[3] = ToLinear16[ca = wp[3]];	    n -= 4;	    while (n > 0) {		wp += 4;		op += 4;		n -= 4;		op[0] = ToLinear16[(cr += wp[0]) & mask];		op[1] = ToLinear16[(cg += wp[1]) & mask];		op[2] = ToLinear16[(cb += wp[2]) & mask];		op[3] = ToLinear16[(ca += wp[3]) & mask];	    }	} else {	    REPEAT(stride, *op = ToLinear16[*wp&mask]; wp++; op++)	    n -= stride;	    while (n > 0) {		REPEAT(stride,		    wp[stride] += *wp; *op = ToLinear16[*wp&mask]; wp++; op++)		n -= stride;	    }	}    }}/*  * Returns the log encoded 11-bit values with the horizontal * differencing undone. */static voidhorizontalAccumulate11(uint16 *wp, int n, int stride, uint16 *op){    register unsigned int  cr, cg, cb, ca, mask;    if (n >= stride) {	mask = CODE_MASK;	if (stride == 3) {	    op[0] = cr = wp[0];  op[1] = cg = wp[1];  op[2] = cb = wp[2];	    n -= 3;	    while (n > 0) {		wp += 3;		op += 3;		n -= 3;		op[0] = (cr += wp[0]) & mask;		op[1] = (cg += wp[1]) & mask;		op[2] = (cb += wp[2]) & mask;	    }	} else if (stride == 4) {	    op[0] = cr = wp[0];  op[1] = cg = wp[1];	    op[2] = cb = wp[2];  op[3] = ca = wp[3];	    n -= 4;	    while (n > 0) {		wp += 4;		op += 4;		n -= 4;		op[0] = (cr += wp[0]) & mask;		op[1] = (cg += wp[1]) & mask;		op[2] = (cb += wp[2]) & mask;		op[3] = (ca += wp[3]) & mask;	    } 	} else {	    REPEAT(stride, *op = *wp&mask; wp++; op++)	    n -= stride;	    while (n > 0) {		REPEAT(stride,		    wp[stride] += *wp; *op = *wp&mask; wp++; op++)		n -= stride;	    }	}    }}static voidhorizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op,	unsigned char *ToLinear8){    register unsigned int  cr, cg, cb, ca, mask;    if (n >= stride) {	mask = CODE_MASK;	if (stride == 3) {	    op[0] = ToLinear8[cr = wp[0]];	    op[1] = ToLinear8[cg = wp[1]];	    op[2] = ToLinear8[cb = wp[2]];	    n -= 3;	    while (n > 0) {		n -= 3;		wp += 3;		op += 3;		op[0] = ToLinear8[(cr += wp[0]) & mask];		op[1] = ToLinear8[(cg += wp[1]) & mask];		op[2] = ToLinear8[(cb += wp[2]) & mask];	    }	} else if (stride == 4) {	    op[0] = ToLinear8[cr = wp[0]];	    op[1] = ToLinear8[cg = wp[1]];	    op[2] = ToLinear8[cb = wp[2]];	    op[3] = ToLinear8[ca = wp[3]];	    n -= 4;	    while (n > 0) {		n -= 4;		wp += 4;		op += 4;		op[0] = ToLinear8[(cr += wp[0]) & mask];		op[1] = ToLinear8[(cg += wp[1]) & mask];		op[2] = ToLinear8[(cb += wp[2]) & mask];		op[3] = ToLinear8[(ca += wp[3]) & mask];	    }	} else {	    REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++)	    n -= stride;	    while (n > 0) {		REPEAT(stride,		    wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++)		n -= stride;	    }	}    }}static voidhorizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op,	unsigned char *ToLinear8){    register unsigned int  cr, cg, cb, ca, mask;    register unsigned char  t0, t1, t2, t3;    if (n >= stride) {	mask = CODE_MASK;	if (stride == 3) {	    op[0] = 0;	    t1 = ToLinear8[cb = wp[2]];	    t2 = ToLinear8[cg = wp[1]];	    t3 = ToLinear8[cr = wp[0]];	    op[1] = t1;	    op[2] = t2;	    op[3] = t3;	    n -= 3;	    while (n > 0) {		n -= 3;		wp += 3;		op += 4;		op[0] = 0;		t1 = ToLinear8[(cb += wp[2]) & mask];		t2 = ToLinear8[(cg += wp[1]) & mask];		t3 = ToLinear8[(cr += wp[0]) & mask];		op[1] = t1;		op[2] = t2;		op[3] = t3;	    }	} else if (stride == 4) {	    t0 = ToLinear8[ca = wp[3]];	    t1 = ToLinear8[cb = wp[2]];	    t2 = ToLinear8[cg = wp[1]];	    t3 = ToLinear8[cr = wp[0]];	    op[0] = t0;	    op[1] = t1;	    op[2] = t2;	    op[3] = t3;	    n -= 4;	    while (n > 0) {		n -= 4;		wp += 4;		op += 4;		t0 = ToLinear8[(ca += wp[3]) & mask];		t1 = ToLinear8[(cb += wp[2]) & mask];		t2 = ToLinear8[(cg += wp[1]) & mask];		t3 = ToLinear8[(cr += wp[0]) & mask];		op[0] = t0;		op[1] = t1;		op[2] = t2;		op[3] = t3;	    }	} else {	    REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++)	    n -= stride;	    while (n > 0) {		REPEAT(stride,		    wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++)		n -= stride;	    }	}    }}/* * State block for each open TIFF * file using PixarLog compression/decompression.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品超碰一区二区三区| 视频一区二区中文字幕| 精品国产伦一区二区三区免费| 日本久久一区二区| 99精品国产99久久久久久白柏 | 99精品视频在线观看| 国产成a人无v码亚洲福利| 极品少妇一区二区| 久国产精品韩国三级视频| 亚洲国产wwwccc36天堂| 综合分类小说区另类春色亚洲小说欧美 | 男人的天堂久久精品| 1024亚洲合集| 久久综合久色欧美综合狠狠| 久久 天天综合| 国产超碰在线一区| 亚洲va欧美va人人爽| 亚洲免费观看高清完整版在线 | jlzzjlzz国产精品久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 一区在线观看免费| 欧美韩日一区二区三区四区| 制服丝袜av成人在线看| 在线精品视频免费播放| 欧美喷潮久久久xxxxx| 91一区二区在线| 国产九色精品成人porny| 另类欧美日韩国产在线| 日韩一区二区三| 亚洲国产精品黑人久久久| 精品国产免费人成在线观看| 中文字幕在线观看一区二区| 在线一区二区三区做爰视频网站| 国产麻豆日韩欧美久久| 国产在线播放一区| 夜夜精品视频一区二区| 亚洲综合视频在线| 亚洲午夜在线电影| 亚洲人精品午夜| 亚洲日本在线a| 欧美日韩一区二区电影| 欧美在线不卡视频| 欧美影视一区二区三区| 99久久99久久精品国产片果冻 | 欧美成人vr18sexvr| 日韩亚洲欧美一区| 日韩精品最新网址| 91啪在线观看| 国产大片一区二区| 国产在线播精品第三| 国产大陆亚洲精品国产| 久久久噜噜噜久久人人看| 另类调教123区| 美女视频一区在线观看| 午夜久久久久久久久久一区二区| 尤物在线观看一区| 亚洲一卡二卡三卡四卡| 亚洲国产色一区| 男男视频亚洲欧美| 亚洲你懂的在线视频| 美女视频黄 久久| 国产一区欧美日韩| 成人丝袜18视频在线观看| 91在线视频在线| 色哟哟一区二区在线观看| 精品女同一区二区| 国产欧美一区二区精品忘忧草 | 日韩一二在线观看| 精品日韩一区二区三区| 久久免费精品国产久精品久久久久| 欧美男男青年gay1069videost| 久久久久久久网| 中文字幕一区二区三区不卡| 一区二区三区在线观看国产| 日韩黄色免费网站| 国产精品一区二区久久精品爱涩| 久久精品国产999大香线蕉| 国产精品资源在线看| 日本高清不卡在线观看| 欧美日韩视频第一区| 久久午夜电影网| 亚洲一区二区三区四区在线观看| 久久国产夜色精品鲁鲁99| 91网上在线视频| 欧美一区二区三区公司| 国产精品美女久久久久久久网站| 欧美精品一区二区三区一线天视频 | 日韩国产精品91| 国产乱人伦偷精品视频不卡| 国内不卡的二区三区中文字幕 | 亚洲成人午夜电影| 国产精品77777| 在线观看日韩国产| 久久精品日韩一区二区三区| 久久婷婷国产综合精品青草| 蜜臀av性久久久久蜜臀aⅴ四虎 | 午夜精品福利在线| 国产电影精品久久禁18| 国产99久久久国产精品潘金网站| 欧美精品一区二区三区在线| 亚洲精品国产一区二区精华液| 免费不卡在线观看| av亚洲产国偷v产偷v自拍| 91碰在线视频| 国产精品私房写真福利视频| 日韩精品一区第一页| 蜜臀久久久久久久| 色天天综合色天天久久| 欧美国产综合一区二区| 久久激情五月婷婷| 欧美视频精品在线观看| 欧美激情资源网| 日韩电影免费在线看| 激情六月婷婷久久| 91影院在线免费观看| 欧美日韩在线电影| 亚洲免费av高清| 粉嫩欧美一区二区三区高清影视| 91精品国产综合久久久蜜臀图片| 欧美激情一区在线| 91在线视频播放地址| 久久精品夜色噜噜亚洲aⅴ| 麻豆视频观看网址久久| 99久久精品国产一区| 亚洲综合免费观看高清完整版| av成人老司机| 国产欧美日韩不卡免费| 狠狠色丁香九九婷婷综合五月| 精品福利一二区| 日日夜夜精品视频天天综合网| 色妹子一区二区| 国产色91在线| 亚洲综合一区在线| 成人涩涩免费视频| 欧美激情综合五月色丁香| 韩国三级电影一区二区| 欧美一区二区免费视频| 国产精品人成在线观看免费| 色香蕉成人二区免费| 国产无一区二区| 成人黄色777网| 欧美精品一区视频| 色婷婷av一区| 五月天丁香久久| 欧美日韩大陆一区二区| 欧美国产精品v| 96av麻豆蜜桃一区二区| 国产乱理伦片在线观看夜一区| 91精品国产综合久久久久久| 亚洲一区二区视频在线| 亚洲一线二线三线视频| 精品嫩草影院久久| 国产福利精品导航| 国产偷国产偷精品高清尤物 | 久久国产剧场电影| 欧美成人国产一区二区| 亚洲日本在线a| 欧美tk—视频vk| 国产精品自拍三区| 中文欧美字幕免费| 91免费视频网| 狠狠色丁香久久婷婷综合_中| 久久久久久久久久久黄色| 成人黄色免费短视频| 亚洲宅男天堂在线观看无病毒 | 亚洲欧洲精品一区二区三区| 日本久久一区二区三区| 欧美日韩国产另类不卡| 国产精品免费视频网站| 国产ts人妖一区二区| 中文字幕久久午夜不卡| 国产suv精品一区二区三区| 国产精品嫩草久久久久| 欧美曰成人黄网| 五月天丁香久久| 欧美精品在线观看播放| 狠狠色丁香婷综合久久| 国产精品久久久久久一区二区三区 | 蜜桃久久av一区| 欧美成人艳星乳罩| 成人av午夜电影| 亚洲国产乱码最新视频| 一本一本久久a久久精品综合麻豆| 极品尤物av久久免费看| 亚洲欧美一区二区视频| 欧美日韩免费在线视频| 亚洲国产精品精华液网站| 中文字幕一区二区在线观看| 欧美电影在哪看比较好| 国产精品99久久不卡二区| 1区2区3区国产精品| 国产网红主播福利一区二区| 色婷婷国产精品综合在线观看| 男女男精品网站| 日本伊人色综合网| 国产精品久久久99| 日韩一二三四区| 成人精品国产免费网站| 国产乱淫av一区二区三区| 性久久久久久久|