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

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

?? function.cc

?? 這是一個做pdf閱讀器的源代碼文件,是大家學習閱讀器資料的很好參考
?? CC
?? 第 1 頁 / 共 3 頁
字號:
//========================================================================//// Function.cc//// Copyright 2001-2003 Glyph & Cog, LLC////========================================================================#include <aconf.h>#ifdef USE_GCC_PRAGMAS#pragma implementation#endif#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>#include "gmem.h"#include "Object.h"#include "Dict.h"#include "Stream.h"#include "Error.h"#include "Function.h"//------------------------------------------------------------------------// Function//------------------------------------------------------------------------Function::Function() {}Function::~Function() {}Function *Function::parse(Object *funcObj) {  Function *func;  Dict *dict;  int funcType;  Object obj1;  if (funcObj->isStream()) {    dict = funcObj->streamGetDict();  } else if (funcObj->isDict()) {    dict = funcObj->getDict();  } else if (funcObj->isName("Identity")) {    return new IdentityFunction();  } else {    error(-1, "Expected function dictionary or stream");    return NULL;  }  if (!dict->lookup("FunctionType", &obj1)->isInt()) {    error(-1, "Function type is missing or wrong type");    obj1.free();    return NULL;  }  funcType = obj1.getInt();  obj1.free();  if (funcType == 0) {    func = new SampledFunction(funcObj, dict);  } else if (funcType == 2) {    func = new ExponentialFunction(funcObj, dict);  } else if (funcType == 3) {    func = new StitchingFunction(funcObj, dict);  } else if (funcType == 4) {    func = new PostScriptFunction(funcObj, dict);  } else {    error(-1, "Unimplemented function type (%d)", funcType);    return NULL;  }  if (!func->isOk()) {    delete func;    return NULL;  }  return func;}GBool Function::init(Dict *dict) {  Object obj1, obj2;  int i;  //----- Domain  if (!dict->lookup("Domain", &obj1)->isArray()) {    error(-1, "Function is missing domain");    goto err2;  }  m = obj1.arrayGetLength() / 2;  if (m > funcMaxInputs) {    error(-1, "Functions with more than %d inputs are unsupported",	  funcMaxInputs);    goto err2;  }  for (i = 0; i < m; ++i) {    obj1.arrayGet(2*i, &obj2);    if (!obj2.isNum()) {      error(-1, "Illegal value in function domain array");      goto err1;    }    domain[i][0] = obj2.getNum();    obj2.free();    obj1.arrayGet(2*i+1, &obj2);    if (!obj2.isNum()) {      error(-1, "Illegal value in function domain array");      goto err1;    }    domain[i][1] = obj2.getNum();    obj2.free();  }  obj1.free();  //----- Range  hasRange = gFalse;  n = 0;  if (dict->lookup("Range", &obj1)->isArray()) {    hasRange = gTrue;    n = obj1.arrayGetLength() / 2;    if (n > funcMaxOutputs) {      error(-1, "Functions with more than %d outputs are unsupported",	    funcMaxOutputs);      goto err2;    }    for (i = 0; i < n; ++i) {      obj1.arrayGet(2*i, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function range array");	goto err1;      }      range[i][0] = obj2.getNum();      obj2.free();      obj1.arrayGet(2*i+1, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function range array");	goto err1;      }      range[i][1] = obj2.getNum();      obj2.free();    }  }  obj1.free();  return gTrue; err1:  obj2.free(); err2:  obj1.free();  return gFalse;}//------------------------------------------------------------------------// IdentityFunction//------------------------------------------------------------------------IdentityFunction::IdentityFunction() {  int i;  // fill these in with arbitrary values just in case they get used  // somewhere  m = funcMaxInputs;  n = funcMaxOutputs;  for (i = 0; i < funcMaxInputs; ++i) {    domain[i][0] = 0;    domain[i][1] = 1;  }  hasRange = gFalse;}IdentityFunction::~IdentityFunction() {}void IdentityFunction::transform(double *in, double *out) {  int i;  for (i = 0; i < funcMaxOutputs; ++i) {    out[i] = in[i];  }}//------------------------------------------------------------------------// SampledFunction//------------------------------------------------------------------------SampledFunction::SampledFunction(Object *funcObj, Dict *dict) {  Stream *str;  int sampleBits;  double sampleMul;  Object obj1, obj2;  Guint buf, bitMask;  int bits;  Guint s;  int i;  samples = NULL;  sBuf = NULL;  ok = gFalse;  //----- initialize the generic stuff  if (!init(dict)) {    goto err1;  }  if (!hasRange) {    error(-1, "Type 0 function is missing range");    goto err1;  }  if (m > sampledFuncMaxInputs) {    error(-1, "Sampled functions with more than %d inputs are unsupported",	  sampledFuncMaxInputs);    goto err1;  }  //----- buffer  sBuf = (double *)gmallocn(1 << m, sizeof(double));  //----- get the stream  if (!funcObj->isStream()) {    error(-1, "Type 0 function isn't a stream");    goto err1;  }  str = funcObj->getStream();  //----- Size  if (!dict->lookup("Size", &obj1)->isArray() ||      obj1.arrayGetLength() != m) {    error(-1, "Function has missing or invalid size array");    goto err2;  }  for (i = 0; i < m; ++i) {    obj1.arrayGet(i, &obj2);    if (!obj2.isInt()) {      error(-1, "Illegal value in function size array");      goto err3;    }    sampleSize[i] = obj2.getInt();    obj2.free();  }  obj1.free();  idxMul[0] = n;  for (i = 1; i < m; ++i) {    idxMul[i] = idxMul[i-1] * sampleSize[i-1];  }  //----- BitsPerSample  if (!dict->lookup("BitsPerSample", &obj1)->isInt()) {    error(-1, "Function has missing or invalid BitsPerSample");    goto err2;  }  sampleBits = obj1.getInt();  sampleMul = 1.0 / (pow(2.0, (double)sampleBits) - 1);  obj1.free();  //----- Encode  if (dict->lookup("Encode", &obj1)->isArray() &&      obj1.arrayGetLength() == 2*m) {    for (i = 0; i < m; ++i) {      obj1.arrayGet(2*i, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function encode array");	goto err3;      }      encode[i][0] = obj2.getNum();      obj2.free();      obj1.arrayGet(2*i+1, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function encode array");	goto err3;      }      encode[i][1] = obj2.getNum();      obj2.free();    }  } else {    for (i = 0; i < m; ++i) {      encode[i][0] = 0;      encode[i][1] = sampleSize[i] - 1;    }  }  obj1.free();  for (i = 0; i < m; ++i) {    inputMul[i] = (encode[i][1] - encode[i][0]) /                  (domain[i][1] - domain[i][0]);  }  //----- Decode  if (dict->lookup("Decode", &obj1)->isArray() &&      obj1.arrayGetLength() == 2*n) {    for (i = 0; i < n; ++i) {      obj1.arrayGet(2*i, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function decode array");	goto err3;      }      decode[i][0] = obj2.getNum();      obj2.free();      obj1.arrayGet(2*i+1, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function decode array");	goto err3;      }      decode[i][1] = obj2.getNum();      obj2.free();    }  } else {    for (i = 0; i < n; ++i) {      decode[i][0] = range[i][0];      decode[i][1] = range[i][1];    }  }  obj1.free();  //----- samples  nSamples = n;  for (i = 0; i < m; ++i)    nSamples *= sampleSize[i];  samples = (double *)gmallocn(nSamples, sizeof(double));  buf = 0;  bits = 0;  bitMask = (1 << sampleBits) - 1;  str->reset();  for (i = 0; i < nSamples; ++i) {    if (sampleBits == 8) {      s = str->getChar();    } else if (sampleBits == 16) {      s = str->getChar();      s = (s << 8) + str->getChar();    } else if (sampleBits == 32) {      s = str->getChar();      s = (s << 8) + str->getChar();      s = (s << 8) + str->getChar();      s = (s << 8) + str->getChar();    } else {      while (bits < sampleBits) {	buf = (buf << 8) | (str->getChar() & 0xff);	bits += 8;      }      s = (buf >> (bits - sampleBits)) & bitMask;      bits -= sampleBits;    }    samples[i] = (double)s * sampleMul;  }  str->close();  ok = gTrue;  return; err3:  obj2.free(); err2:  obj1.free(); err1:  return;}SampledFunction::~SampledFunction() {  if (samples) {    gfree(samples);  }  if (sBuf) {    gfree(sBuf);  }}SampledFunction::SampledFunction(SampledFunction *func) {  memcpy(this, func, sizeof(SampledFunction));  samples = (double *)gmallocn(nSamples, sizeof(double));  memcpy(samples, func->samples, nSamples * sizeof(double));  sBuf = (double *)gmallocn(1 << m, sizeof(double));}void SampledFunction::transform(double *in, double *out) {  double x;  int e[funcMaxInputs][2];  double efrac0[funcMaxInputs];  double efrac1[funcMaxInputs];  int i, j, k, idx, t;  // map input values into sample array  for (i = 0; i < m; ++i) {    x = (in[i] - domain[i][0]) * inputMul[i] + encode[i][0];    if (x < 0) {      x = 0;    } else if (x > sampleSize[i] - 1) {      x = sampleSize[i] - 1;    }    e[i][0] = (int)x;    if ((e[i][1] = e[i][0] + 1) >= sampleSize[i]) {      // this happens if in[i] = domain[i][1]      e[i][1] = e[i][0];    }    efrac1[i] = x - e[i][0];    efrac0[i] = 1 - efrac1[i];  }  // for each output, do m-linear interpolation  for (i = 0; i < n; ++i) {    // pull 2^m values out of the sample array    for (j = 0; j < (1<<m); ++j) {      idx = i;      for (k = 0, t = j; k < m; ++k, t >>= 1) {	idx += idxMul[k] * (e[k][t & 1]);      }      sBuf[j] = samples[idx];    }    // do m sets of interpolations    for (j = 0, t = (1<<m); j < m; ++j, t >>= 1) {      for (k = 0; k < t; k += 2) {	sBuf[k >> 1] = efrac0[j] * sBuf[k] + efrac1[j] * sBuf[k+1];      }    }    // map output value to range    out[i] = sBuf[0] * (decode[i][1] - decode[i][0]) + decode[i][0];    if (out[i] < range[i][0]) {      out[i] = range[i][0];    } else if (out[i] > range[i][1]) {      out[i] = range[i][1];    }  }}//------------------------------------------------------------------------// ExponentialFunction//------------------------------------------------------------------------ExponentialFunction::ExponentialFunction(Object *funcObj, Dict *dict) {  Object obj1, obj2;  int i;  ok = gFalse;  //----- initialize the generic stuff  if (!init(dict)) {    goto err1;  }  if (m != 1) {    error(-1, "Exponential function with more than one input");    goto err1;  }  //----- C0  if (dict->lookup("C0", &obj1)->isArray()) {    if (hasRange && obj1.arrayGetLength() != n) {      error(-1, "Function's C0 array is wrong length");      goto err2;    }    n = obj1.arrayGetLength();    for (i = 0; i < n; ++i) {      obj1.arrayGet(i, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function C0 array");	goto err3;      }      c0[i] = obj2.getNum();      obj2.free();    }  } else {    if (hasRange && n != 1) {      error(-1, "Function's C0 array is wrong length");      goto err2;    }    n = 1;    c0[0] = 0;  }  obj1.free();  //----- C1  if (dict->lookup("C1", &obj1)->isArray()) {    if (obj1.arrayGetLength() != n) {      error(-1, "Function's C1 array is wrong length");      goto err2;    }    for (i = 0; i < n; ++i) {      obj1.arrayGet(i, &obj2);      if (!obj2.isNum()) {	error(-1, "Illegal value in function C1 array");	goto err3;      }      c1[i] = obj2.getNum();      obj2.free();    }  } else {    if (n != 1) {      error(-1, "Function's C1 array is wrong length");      goto err2;    }    c1[0] = 1;  }  obj1.free();  //----- N (exponent)  if (!dict->lookup("N", &obj1)->isNum()) {    error(-1, "Function has missing or invalid N");    goto err2;  }  e = obj1.getNum();  obj1.free();  ok = gTrue;  return; err3:  obj2.free(); err2:  obj1.free(); err1:  return;}ExponentialFunction::~ExponentialFunction() {}ExponentialFunction::ExponentialFunction(ExponentialFunction *func) {  memcpy(this, func, sizeof(ExponentialFunction));}void ExponentialFunction::transform(double *in, double *out) {  double x;  int i;  if (in[0] < domain[0][0]) {    x = domain[0][0];  } else if (in[0] > domain[0][1]) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品专区| 欧美猛男男办公室激情| 久久九九影视网| 久草中文综合在线| 日韩免费观看高清完整版在线观看 | 亚洲蜜桃精久久久久久久| 蜜桃av噜噜一区| 日韩一级高清毛片| 国产一区二区主播在线| 中文字幕精品一区二区精品绿巨人| 成人va在线观看| 亚洲一区二区三区视频在线 | 日韩国产一区二| 欧美一级黄色大片| 国产91在线|亚洲| 国产精品色婷婷| 在线观看亚洲a| 性做久久久久久免费观看欧美| 欧美久久一二区| 国内精品国产成人| 中文字幕欧美激情| 99精品视频一区| 午夜视频一区在线观看| 日韩欧美一二三| a亚洲天堂av| 日本不卡123| 中文一区一区三区高中清不卡| 欧美日韩一区二区在线观看| 国产一区久久久| 亚洲一级二级三级在线免费观看| 精品少妇一区二区三区免费观看 | 久久99国产精品久久| 欧美国产一区视频在线观看| 欧美日韩另类一区| 国产成人h网站| 亚洲成人黄色小说| 国产精品天干天干在线综合| 欧美日韩成人一区| fc2成人免费人成在线观看播放| 亚洲自拍偷拍九九九| 26uuu色噜噜精品一区| 成人高清免费观看| 日韩精品久久理论片| 国产片一区二区三区| 91香蕉视频污在线| 国产在线看一区| 五月婷婷久久综合| 国产精品美女一区二区| 欧美日韩久久久一区| 成人免费毛片app| 亚洲电影视频在线| 国产精品久久久久久亚洲伦| 日韩欧美国产精品| 99久久777色| 成人黄色片在线观看| 久久电影网站中文字幕| 夜夜嗨av一区二区三区网页| 欧美激情一区三区| 26uuu精品一区二区三区四区在线| 欧美这里有精品| 99在线精品视频| 国产精品综合一区二区三区| 免费在线看成人av| 亚洲成人免费av| 一区二区不卡在线播放 | 国产精品麻豆网站| 久久色.com| 欧美电影免费观看完整版| 欧美电影在线免费观看| 在线一区二区视频| 色成年激情久久综合| bt7086福利一区国产| youjizz国产精品| 成人性生交大片免费看在线播放| 国产一区二区精品久久91| 精品一区二区三区欧美| 久久99精品久久只有精品| 六月丁香综合在线视频| 欧美aaaaaa午夜精品| 偷窥国产亚洲免费视频 | 黑人巨大精品欧美黑白配亚洲| 蜜桃视频一区二区| 久久精品国产精品青草| 久久丁香综合五月国产三级网站| 老司机免费视频一区二区三区| 蜜桃免费网站一区二区三区| 青青草97国产精品免费观看无弹窗版 | 欧美一区二区三区公司| 3751色影院一区二区三区| 在线不卡a资源高清| 欧美日韩国产bt| 在线成人免费观看| 欧美本精品男人aⅴ天堂| 久久久久久9999| 国产欧美一区二区精品久导航| 中文字幕乱码一区二区免费| 日韩理论片网站| 亚洲一区二区在线播放相泽 | 久久久午夜精品| 久久久电影一区二区三区| 中文字幕精品三区| 亚洲精品视频自拍| 日韩在线a电影| 国产一区二区三区在线观看精品 | 国产欧美精品国产国产专区| 国产精品成人午夜| 亚洲一级电影视频| 蜜桃久久久久久| 懂色一区二区三区免费观看| 色94色欧美sute亚洲线路一久| 欧美嫩在线观看| 国产亚洲精品精华液| 18成人在线视频| 视频一区欧美日韩| 国产原创一区二区三区| a4yy欧美一区二区三区| 制服丝袜国产精品| 国产精品美女久久久久久久久| 亚洲一区二区三区爽爽爽爽爽| 精品亚洲欧美一区| 91免费看`日韩一区二区| 在线综合视频播放| 中文字幕av一区二区三区| 亚洲一区二区视频| 国产一区亚洲一区| 欧美伊人久久久久久久久影院| 欧美大片在线观看一区二区| 亚洲同性gay激情无套| 免费成人小视频| 97精品超碰一区二区三区| 欧美电视剧在线看免费| 亚洲欧美激情一区二区| 激情久久久久久久久久久久久久久久| 91丝袜美女网| 精品国产免费久久 | 老司机免费视频一区二区| 99re视频精品| 2021中文字幕一区亚洲| 午夜国产精品影院在线观看| youjizz久久| 久久久一区二区三区捆绑**| 日韩精品一级二级| 91免费小视频| 国产日韩av一区二区| 久久精品国产免费看久久精品| 色94色欧美sute亚洲13| 欧美国产欧美综合| 激情五月婷婷综合网| 91麻豆精品国产91久久久| 亚洲精品免费在线播放| 99re热这里只有精品免费视频 | 国产精品欧美一区二区三区| 久久av资源站| 91精品国产乱码久久蜜臀| 一区二区三区中文在线观看| 99在线热播精品免费| 国产三级久久久| 国产尤物一区二区在线| 精品国产自在久精品国产| 奇米色777欧美一区二区| 欧日韩精品视频| 中文字幕av一区二区三区免费看 | 亚洲一区中文日韩| 91香蕉视频黄| 自拍偷拍亚洲欧美日韩| hitomi一区二区三区精品| 欧美国产一区在线| 成年人网站91| 中文字幕一区不卡| 99久久国产综合精品色伊| 国产精品成人网| 一本大道av伊人久久综合| 亚洲免费毛片网站| 91免费视频网| 又紧又大又爽精品一区二区| 99久久99久久久精品齐齐| 亚洲欧美aⅴ...| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品久久久久四虎| 色综合久久九月婷婷色综合| 亚洲三级久久久| 欧美在线免费观看视频| 午夜久久电影网| 欧美裸体一区二区三区| 蜜臀精品一区二区三区在线观看 | 成人av片在线观看| 亚洲欧美激情小说另类| 欧美色图天堂网| 性久久久久久久| 4438x成人网最大色成网站| 日本网站在线观看一区二区三区| 日韩一区二区三区四区五区六区| 日本欧美大码aⅴ在线播放| 日韩亚洲欧美综合| 韩国精品主播一区二区在线观看 | 亚洲国产精品v| 色一情一乱一乱一91av| 日韩一区精品视频| 国产亚洲欧美一级| 一本大道综合伊人精品热热|