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

📄 gfxstate.cc

📁 swf文件查看工具,能够看flash文件的格式
💻 CC
📖 第 1 页 / 共 5 页
字号:
  x = c1 * m  * y1 * k;  // 0 1 0 1  r += 0.1412 * x;  x = c1 * m  * y  * k1; // 0 1 1 0  r += 0.9294 * x;  g += 0.1098 * x;  b += 0.1412 * x;  x = c1 * m  * y  * k;  // 0 1 1 1  r += 0.1333 * x;  x = c  * m1 * y1 * k1; // 1 0 0 0  g += 0.6784 * x;  b += 0.9373 * x;  x = c  * m1 * y1 * k;  // 1 0 0 1  g += 0.0588 * x;  b += 0.1412 * x;  x = c  * m1 * y  * k1; // 1 0 1 0  g += 0.6510 * x;  b += 0.3137 * x;  x = c  * m1 * y  * k;  // 1 0 1 1  g += 0.0745 * x;  x = c  * m  * y1 * k1; // 1 1 0 0  r += 0.1804 * x;  g += 0.1922 * x;  b += 0.5725 * x;  x = c  * m  * y1 * k;  // 1 1 0 1  b += 0.0078 * x;  x = c  * m  * y  * k1; // 1 1 1 0  r += 0.2118 * x;  g += 0.2119 * x;  b += 0.2235 * x;  rgb->r = clip01(dblToCol(r));  rgb->g = clip01(dblToCol(g));  rgb->b = clip01(dblToCol(b));}void GfxDeviceCMYKColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  cmyk->c = clip01(color->c[0]);  cmyk->m = clip01(color->c[1]);  cmyk->y = clip01(color->c[2]);  cmyk->k = clip01(color->c[3]);}void GfxDeviceCMYKColorSpace::getDefaultColor(GfxColor *color) {  color->c[0] = 0;  color->c[1] = 0;  color->c[2] = 0;  color->c[3] = gfxColorComp1;}//------------------------------------------------------------------------// GfxLabColorSpace//------------------------------------------------------------------------// This is the inverse of MatrixLMN in Example 4.10 from the PostScript// Language Reference, Third Edition.static double xyzrgb[3][3] = {  {  3.240449, -1.537136, -0.498531 },  { -0.969265,  1.876011,  0.041556 },  {  0.055643, -0.204026,  1.057229 }};GfxLabColorSpace::GfxLabColorSpace() {  whiteX = whiteY = whiteZ = 1;  blackX = blackY = blackZ = 0;  aMin = bMin = -100;  aMax = bMax = 100;}GfxLabColorSpace::~GfxLabColorSpace() {}GfxColorSpace *GfxLabColorSpace::copy() {  GfxLabColorSpace *cs;  cs = new GfxLabColorSpace();  cs->whiteX = whiteX;  cs->whiteY = whiteY;  cs->whiteZ = whiteZ;  cs->blackX = blackX;  cs->blackY = blackY;  cs->blackZ = blackZ;  cs->aMin = aMin;  cs->aMax = aMax;  cs->bMin = bMin;  cs->bMax = bMax;  cs->kr = kr;  cs->kg = kg;  cs->kb = kb;  return cs;}GfxColorSpace *GfxLabColorSpace::parse(Array *arr) {  GfxLabColorSpace *cs;  Object obj1, obj2, obj3;  arr->get(1, &obj1);  if (!obj1.isDict()) {    error(-1, "Bad Lab color space");    obj1.free();    return NULL;  }  cs = new GfxLabColorSpace();  if (obj1.dictLookup("WhitePoint", &obj2)->isArray() &&      obj2.arrayGetLength() == 3) {    obj2.arrayGet(0, &obj3);    cs->whiteX = obj3.getNum();    obj3.free();    obj2.arrayGet(1, &obj3);    cs->whiteY = obj3.getNum();    obj3.free();    obj2.arrayGet(2, &obj3);    cs->whiteZ = obj3.getNum();    obj3.free();  }  obj2.free();  if (obj1.dictLookup("BlackPoint", &obj2)->isArray() &&      obj2.arrayGetLength() == 3) {    obj2.arrayGet(0, &obj3);    cs->blackX = obj3.getNum();    obj3.free();    obj2.arrayGet(1, &obj3);    cs->blackY = obj3.getNum();    obj3.free();    obj2.arrayGet(2, &obj3);    cs->blackZ = obj3.getNum();    obj3.free();  }  obj2.free();  if (obj1.dictLookup("Range", &obj2)->isArray() &&      obj2.arrayGetLength() == 4) {    obj2.arrayGet(0, &obj3);    cs->aMin = obj3.getNum();    obj3.free();    obj2.arrayGet(1, &obj3);    cs->aMax = obj3.getNum();    obj3.free();    obj2.arrayGet(2, &obj3);    cs->bMin = obj3.getNum();    obj3.free();    obj2.arrayGet(3, &obj3);    cs->bMax = obj3.getNum();    obj3.free();  }  obj2.free();  obj1.free();  cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX +		xyzrgb[0][1] * cs->whiteY +		xyzrgb[0][2] * cs->whiteZ);  cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX +		xyzrgb[1][1] * cs->whiteY +		xyzrgb[1][2] * cs->whiteZ);  cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX +		xyzrgb[2][1] * cs->whiteY +		xyzrgb[2][2] * cs->whiteZ);  return cs;}void GfxLabColorSpace::getGray(GfxColor *color, GfxGray *gray) {  GfxRGB rgb;  getRGB(color, &rgb);  *gray = clip01((GfxColorComp)(0.299 * rgb.r +				0.587 * rgb.g +				0.114 * rgb.b + 0.5));}void GfxLabColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {  double X, Y, Z;  double t1, t2;  double r, g, b;  // convert L*a*b* to CIE 1931 XYZ color space  t1 = (colToDbl(color->c[0]) + 16) / 116;  t2 = t1 + colToDbl(color->c[1]) / 500;  if (t2 >= (6.0 / 29.0)) {    X = t2 * t2 * t2;  } else {    X = (108.0 / 841.0) * (t2 - (4.0 / 29.0));  }  X *= whiteX;  if (t1 >= (6.0 / 29.0)) {    Y = t1 * t1 * t1;  } else {    Y = (108.0 / 841.0) * (t1 - (4.0 / 29.0));  }  Y *= whiteY;  t2 = t1 - colToDbl(color->c[2]) / 200;  if (t2 >= (6.0 / 29.0)) {    Z = t2 * t2 * t2;  } else {    Z = (108.0 / 841.0) * (t2 - (4.0 / 29.0));  }  Z *= whiteZ;  // convert XYZ to RGB, including gamut mapping and gamma correction  r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z;  g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z;  b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z;  rgb->r = dblToCol(pow(clip01(r * kr), 0.5));  rgb->g = dblToCol(pow(clip01(g * kg), 0.5));  rgb->b = dblToCol(pow(clip01(b * kb), 0.5));}void GfxLabColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  GfxRGB rgb;  GfxColorComp c, m, y, k;  getRGB(color, &rgb);  c = clip01(gfxColorComp1 - rgb.r);  m = clip01(gfxColorComp1 - rgb.g);  y = clip01(gfxColorComp1 - rgb.b);  k = c;  if (m < k) {    k = m;  }  if (y < k) {    k = y;  }  cmyk->c = c - k;  cmyk->m = m - k;  cmyk->y = y - k;  cmyk->k = k;}void GfxLabColorSpace::getDefaultColor(GfxColor *color) {  color->c[0] = 0;  if (aMin > 0) {    color->c[1] = dblToCol(aMin);  } else if (aMax < 0) {    color->c[1] = dblToCol(aMax);  } else {    color->c[1] = 0;  }  if (bMin > 0) {    color->c[2] = dblToCol(bMin);  } else if (bMax < 0) {    color->c[2] = dblToCol(bMax);  } else {    color->c[2] = 0;  }}void GfxLabColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange,					int maxImgPixel) {  decodeLow[0] = 0;  decodeRange[0] = 100;  decodeLow[1] = aMin;  decodeRange[1] = aMax - aMin;  decodeLow[2] = bMin;  decodeRange[2] = bMax - bMin;}//------------------------------------------------------------------------// GfxICCBasedColorSpace//------------------------------------------------------------------------GfxICCBasedColorSpace::GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA,					     Ref *iccProfileStreamA) {  nComps = nCompsA;  alt = altA;  iccProfileStream = *iccProfileStreamA;  rangeMin[0] = rangeMin[1] = rangeMin[2] = rangeMin[3] = 0;  rangeMax[0] = rangeMax[1] = rangeMax[2] = rangeMax[3] = 1;}GfxICCBasedColorSpace::~GfxICCBasedColorSpace() {  delete alt;}GfxColorSpace *GfxICCBasedColorSpace::copy() {  GfxICCBasedColorSpace *cs;  int i;  cs = new GfxICCBasedColorSpace(nComps, alt->copy(), &iccProfileStream);  for (i = 0; i < 4; ++i) {    cs->rangeMin[i] = rangeMin[i];    cs->rangeMax[i] = rangeMax[i];  }  return cs;}GfxColorSpace *GfxICCBasedColorSpace::parse(Array *arr) {  GfxICCBasedColorSpace *cs;  Ref iccProfileStreamA;  int nCompsA;  GfxColorSpace *altA;  Dict *dict;  Object obj1, obj2, obj3;  int i;  arr->getNF(1, &obj1);  if (obj1.isRef()) {    iccProfileStreamA = obj1.getRef();  } else {    iccProfileStreamA.num = 0;    iccProfileStreamA.gen = 0;  }  obj1.free();  arr->get(1, &obj1);  if (!obj1.isStream()) {    error(-1, "Bad ICCBased color space (stream)");    obj1.free();    return NULL;  }  dict = obj1.streamGetDict();  if (!dict->lookup("N", &obj2)->isInt()) {    error(-1, "Bad ICCBased color space (N)");    obj2.free();    obj1.free();    return NULL;  }  nCompsA = obj2.getInt();  obj2.free();  if (nCompsA > gfxColorMaxComps) {    error(-1, "ICCBased color space with too many (%d > %d) components",	  nCompsA, gfxColorMaxComps);    nCompsA = gfxColorMaxComps;  }  if (dict->lookup("Alternate", &obj2)->isNull() ||      !(altA = GfxColorSpace::parse(&obj2))) {    switch (nCompsA) {    case 1:      altA = new GfxDeviceGrayColorSpace();      break;    case 3:      altA = new GfxDeviceRGBColorSpace();      break;    case 4:      altA = new GfxDeviceCMYKColorSpace();      break;    default:      error(-1, "Bad ICCBased color space - invalid N");      obj2.free();      obj1.free();      return NULL;    }  }  obj2.free();  cs = new GfxICCBasedColorSpace(nCompsA, altA, &iccProfileStreamA);  if (dict->lookup("Range", &obj2)->isArray() &&      obj2.arrayGetLength() == 2 * nCompsA) {    for (i = 0; i < nCompsA; ++i) {      obj2.arrayGet(2*i, &obj3);      cs->rangeMin[i] = obj3.getNum();      obj3.free();      obj2.arrayGet(2*i+1, &obj3);      cs->rangeMax[i] = obj3.getNum();      obj3.free();    }  }  obj2.free();  obj1.free();  return cs;}void GfxICCBasedColorSpace::getGray(GfxColor *color, GfxGray *gray) {  alt->getGray(color, gray);}void GfxICCBasedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {  alt->getRGB(color, rgb);}void GfxICCBasedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  alt->getCMYK(color, cmyk);}void GfxICCBasedColorSpace::getDefaultColor(GfxColor *color) {  int i;  for (i = 0; i < nComps; ++i) {    if (rangeMin[i] > 0) {      color->c[i] = dblToCol(rangeMin[i]);    } else if (rangeMax[i] < 0) {      color->c[i] = dblToCol(rangeMax[i]);    } else {      color->c[i] = 0;    }  }}void GfxICCBasedColorSpace::getDefaultRanges(double *decodeLow,					     double *decodeRange,					     int maxImgPixel) {  alt->getDefaultRanges(decodeLow, decodeRange, maxImgPixel);#if 0  // this is nominally correct, but some PDF files don't set the  // correct ranges in the ICCBased dict  int i;  for (i = 0; i < nComps; ++i) {    decodeLow[i] = rangeMin[i];    decodeRange[i] = rangeMax[i] - rangeMin[i];  }#endif}//------------------------------------------------------------------------// GfxIndexedColorSpace//------------------------------------------------------------------------GfxIndexedColorSpace::GfxIndexedColorSpace(GfxColorSpace *baseA,					   int indexHighA) {  base = baseA;  indexHigh = indexHighA;  lookup = (Guchar *)gmallocn((indexHigh + 1) * base->getNComps(),			      sizeof(Guchar));}GfxIndexedColorSpace::~GfxIndexedColorSpace() {  delete base;  gfree(lookup);}GfxColorSpace *GfxIndexedColorSpace::copy() {  GfxIndexedColorSpace *cs;  cs = new GfxIndexedColorSpace(base->copy(), indexHigh);  memcpy(cs->lookup, lookup,	 (indexHigh + 1) * base->getNComps() * sizeof(Guchar));  return cs;}GfxColorSpace *GfxIndexedColorSpace::parse(Array *arr) {  GfxIndexedColorSpace *cs;  GfxColorSpace *baseA;  int indexHighA;  Object obj1;  int x;  char *s;  int n, i, j;  if (arr->getLength() != 4) {    error(-1, "Bad Indexed color space");    goto err1;  }  arr->get(1, &obj1);  if (!(baseA = GfxColorSpace::parse(&obj1))) {    error(-1, "Bad Indexed color space (base color space)");    goto err2;  }  obj1.free();  if (!arr->get(2, &obj1)->isInt()) {    error(-1, "Bad Indexed color space (hival)");    delete baseA;    goto err2;  }  indexHighA = obj1.getInt();  if (indexHighA < 0 || indexHighA > 255) {    // the PDF spec requires indexHigh to be in [0,255] -- allowing    // values larger than 255 creates a security hole: if nComps *    // indexHigh is greater than 2^31, the loop below may overwrite    // past the end of the array    error(-1, "Bad Indexed color space (invalid indexHigh value)");    delete baseA;    goto err2;  }  obj1.free();  cs = new GfxIndexedColorSpace(baseA, indexHighA);  arr->get(3, &obj1);  n = baseA->getNComps();  if (obj1.isStream()) {    obj1.streamReset();    for (i = 0; i <= indexHighA; ++i) {      for (j = 0; j < n; ++j) {	if ((x = obj1.streamGetChar()) == EOF) {	  error(-1, "Bad Indexed color space (lookup table stream too short)");	  goto err3;	}	cs->lookup[i*n + j] = (Guchar)x;      }    }    obj1.streamClose();  } else if (obj1.isString()) {    if (obj1.getString()->getLength() < (indexHighA + 1) * n) {      error(-1, "Bad Indexed color space (lookup table string too short)");      goto err3;    }    s = obj1.getString()->getCString();    for (i = 0; i <= indexHighA; ++i) {      for (j = 0; j < n; ++j) {	cs->lookup[i*n + j] = (Guchar)*s++;      }    }  } else {    error(-1, "Bad Indexed color space (lookup table)");    goto err3;  }  obj1.free();  return cs; err3:  delete cs; err2:  obj1.free(); err1:  return NULL;}GfxColor *GfxIndexedColorSpace::mapColorToBase(GfxColor *color,					       GfxColor *baseColor) {  Guchar *p;  double low[gfxColorMaxComps], range[gfxColorMaxComps];  int n, i;  n = base->getNComps();  base->getDefaultRanges(low, range, indexHigh);  p = &lookup[(int)(colToDbl(color->c[0]) + 0.5) * n];  for (i = 0; i < n; ++i) {    baseColor->c[i] = dblToCol(low[i] + (p[i] / 255.0) * range[i]);  }  return baseColor;}void GfxIndexedColorSpace::getGray(GfxColor *color, GfxGray *gray) {  GfxColor color2;  base->getGray(mapColorToBase(color, &color2), gray);}void GfxIndexedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {  GfxColor color2;  base->getRGB(mapColorToBase(color, &color2), rgb);}void GfxIndexedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  GfxColor color2;  base->getCMYK(mapColorToBase(color, &color2), cmyk);}

⌨️ 快捷键说明

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