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

📄 gfxstate.cc

📁 swf文件查看工具,能够看flash文件的格式
💻 CC
📖 第 1 页 / 共 5 页
字号:
void GfxIndexedColorSpace::getDefaultColor(GfxColor *color) {  color->c[0] = 0;}void GfxIndexedColorSpace::getDefaultRanges(double *decodeLow,					    double *decodeRange,					    int maxImgPixel) {  decodeLow[0] = 0;  decodeRange[0] = maxImgPixel;}//------------------------------------------------------------------------// GfxSeparationColorSpace//------------------------------------------------------------------------GfxSeparationColorSpace::GfxSeparationColorSpace(GString *nameA,						 GfxColorSpace *altA,						 Function *funcA) {  name = nameA;  alt = altA;  func = funcA;  nonMarking = !name->cmp("None");}GfxSeparationColorSpace::~GfxSeparationColorSpace() {  delete name;  delete alt;  delete func;}GfxColorSpace *GfxSeparationColorSpace::copy() {  return new GfxSeparationColorSpace(name->copy(), alt->copy(), func->copy());}//~ handle the 'All' and 'None' colorantsGfxColorSpace *GfxSeparationColorSpace::parse(Array *arr) {  GfxSeparationColorSpace *cs;  GString *nameA;  GfxColorSpace *altA;  Function *funcA;  Object obj1;  if (arr->getLength() != 4) {    error(-1, "Bad Separation color space");    goto err1;  }  if (!arr->get(1, &obj1)->isName()) {    error(-1, "Bad Separation color space (name)");    goto err2;  }  nameA = new GString(obj1.getName());  obj1.free();  arr->get(2, &obj1);  if (!(altA = GfxColorSpace::parse(&obj1))) {    error(-1, "Bad Separation color space (alternate color space)");    goto err3;  }  obj1.free();  arr->get(3, &obj1);  if (!(funcA = Function::parse(&obj1))) {    goto err4;  }  obj1.free();  cs = new GfxSeparationColorSpace(nameA, altA, funcA);  return cs; err4:  delete altA; err3:  delete nameA; err2:  obj1.free(); err1:  return NULL;}void GfxSeparationColorSpace::getGray(GfxColor *color, GfxGray *gray) {  double x;  double c[gfxColorMaxComps];  GfxColor color2;  int i;  x = colToDbl(color->c[0]);  func->transform(&x, c);  for (i = 0; i < alt->getNComps(); ++i) {    color2.c[i] = dblToCol(c[i]);  }  alt->getGray(&color2, gray);}void GfxSeparationColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {  double x;  double c[gfxColorMaxComps];  GfxColor color2;  int i;  x = colToDbl(color->c[0]);  func->transform(&x, c);  for (i = 0; i < alt->getNComps(); ++i) {    color2.c[i] = dblToCol(c[i]);  }  alt->getRGB(&color2, rgb);}void GfxSeparationColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  double x;  double c[gfxColorMaxComps];  GfxColor color2;  int i;  x = colToDbl(color->c[0]);  func->transform(&x, c);  for (i = 0; i < alt->getNComps(); ++i) {    color2.c[i] = dblToCol(c[i]);  }  alt->getCMYK(&color2, cmyk);}void GfxSeparationColorSpace::getDefaultColor(GfxColor *color) {  color->c[0] = gfxColorComp1;}//------------------------------------------------------------------------// GfxDeviceNColorSpace//------------------------------------------------------------------------GfxDeviceNColorSpace::GfxDeviceNColorSpace(int nCompsA,					   GfxColorSpace *altA,					   Function *funcA) {  nComps = nCompsA;  alt = altA;  func = funcA;  nonMarking = gFalse;}GfxDeviceNColorSpace::~GfxDeviceNColorSpace() {  int i;  for (i = 0; i < nComps; ++i) {    delete names[i];  }  delete alt;  delete func;}GfxColorSpace *GfxDeviceNColorSpace::copy() {  GfxDeviceNColorSpace *cs;  int i;  cs = new GfxDeviceNColorSpace(nComps, alt->copy(), func->copy());  for (i = 0; i < nComps; ++i) {    cs->names[i] = names[i]->copy();  }  cs->nonMarking = nonMarking;  return cs;}//~ handle the 'None' colorantGfxColorSpace *GfxDeviceNColorSpace::parse(Array *arr) {  GfxDeviceNColorSpace *cs;  int nCompsA;  GString *namesA[gfxColorMaxComps];  GfxColorSpace *altA;  Function *funcA;  Object obj1, obj2;  int i;  if (arr->getLength() != 4 && arr->getLength() != 5) {    error(-1, "Bad DeviceN color space");    goto err1;  }  if (!arr->get(1, &obj1)->isArray()) {    error(-1, "Bad DeviceN color space (names)");    goto err2;  }  nCompsA = obj1.arrayGetLength();  if (nCompsA > gfxColorMaxComps) {    error(-1, "DeviceN color space with too many (%d > %d) components",	  nCompsA, gfxColorMaxComps);    nCompsA = gfxColorMaxComps;  }  for (i = 0; i < nCompsA; ++i) {    if (!obj1.arrayGet(i, &obj2)->isName()) {      error(-1, "Bad DeviceN color space (names)");      obj2.free();      goto err2;    }    namesA[i] = new GString(obj2.getName());    obj2.free();  }  obj1.free();  arr->get(2, &obj1);  if (!(altA = GfxColorSpace::parse(&obj1))) {    error(-1, "Bad DeviceN color space (alternate color space)");    goto err3;  }  obj1.free();  arr->get(3, &obj1);  if (!(funcA = Function::parse(&obj1))) {    goto err4;  }  obj1.free();  cs = new GfxDeviceNColorSpace(nCompsA, altA, funcA);  cs->nonMarking = gTrue;  for (i = 0; i < nCompsA; ++i) {    cs->names[i] = namesA[i];    if (namesA[i]->cmp("None")) {      cs->nonMarking = gFalse;    }  }  return cs; err4:  delete altA; err3:  for (i = 0; i < nCompsA; ++i) {    delete namesA[i];  } err2:  obj1.free(); err1:  return NULL;}void GfxDeviceNColorSpace::getGray(GfxColor *color, GfxGray *gray) {  double x[gfxColorMaxComps], c[gfxColorMaxComps];  GfxColor color2;  int i;  for (i = 0; i < nComps; ++i) {    x[i] = colToDbl(color->c[i]);  }  func->transform(x, c);  for (i = 0; i < alt->getNComps(); ++i) {    color2.c[i] = dblToCol(c[i]);  }  alt->getGray(&color2, gray);}void GfxDeviceNColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {  double x[gfxColorMaxComps], c[gfxColorMaxComps];  GfxColor color2;  int i;  for (i = 0; i < nComps; ++i) {    x[i] = colToDbl(color->c[i]);  }  func->transform(x, c);  for (i = 0; i < alt->getNComps(); ++i) {    color2.c[i] = dblToCol(c[i]);  }  alt->getRGB(&color2, rgb);}void GfxDeviceNColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  double x[gfxColorMaxComps], c[gfxColorMaxComps];  GfxColor color2;  int i;  for (i = 0; i < nComps; ++i) {    x[i] = colToDbl(color->c[i]);  }  func->transform(x, c);  for (i = 0; i < alt->getNComps(); ++i) {    color2.c[i] = dblToCol(c[i]);  }  alt->getCMYK(&color2, cmyk);}void GfxDeviceNColorSpace::getDefaultColor(GfxColor *color) {  int i;  for (i = 0; i < nComps; ++i) {    color->c[i] = gfxColorComp1;  }}//------------------------------------------------------------------------// GfxPatternColorSpace//------------------------------------------------------------------------GfxPatternColorSpace::GfxPatternColorSpace(GfxColorSpace *underA) {  under = underA;}GfxPatternColorSpace::~GfxPatternColorSpace() {  if (under) {    delete under;  }}GfxColorSpace *GfxPatternColorSpace::copy() {  return new GfxPatternColorSpace(under ? under->copy() :				          (GfxColorSpace *)NULL);}GfxColorSpace *GfxPatternColorSpace::parse(Array *arr) {  GfxPatternColorSpace *cs;  GfxColorSpace *underA;  Object obj1;  if (arr->getLength() != 1 && arr->getLength() != 2) {    error(-1, "Bad Pattern color space");    return NULL;  }  underA = NULL;  if (arr->getLength() == 2) {    arr->get(1, &obj1);    if (!(underA = GfxColorSpace::parse(&obj1))) {      error(-1, "Bad Pattern color space (underlying color space)");      obj1.free();      return NULL;    }    obj1.free();  }  cs = new GfxPatternColorSpace(underA);  return cs;}void GfxPatternColorSpace::getGray(GfxColor *color, GfxGray *gray) {  *gray = 0;}void GfxPatternColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {  rgb->r = rgb->g = rgb->b = 0;}void GfxPatternColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {  cmyk->c = cmyk->m = cmyk->y = 0;  cmyk->k = 1;}void GfxPatternColorSpace::getDefaultColor(GfxColor *color) {  // not used}//------------------------------------------------------------------------// Pattern//------------------------------------------------------------------------GfxPattern::GfxPattern(int typeA) {  type = typeA;}GfxPattern::~GfxPattern() {}GfxPattern *GfxPattern::parse(Object *obj) {  GfxPattern *pattern;  Object obj1;  if (obj->isDict()) {    obj->dictLookup("PatternType", &obj1);  } else if (obj->isStream()) {    obj->streamGetDict()->lookup("PatternType", &obj1);  } else {    return NULL;  }  pattern = NULL;  if (obj1.isInt() && obj1.getInt() == 1) {    pattern = GfxTilingPattern::parse(obj);  } else if (obj1.isInt() && obj1.getInt() == 2) {    pattern = GfxShadingPattern::parse(obj);  }  obj1.free();  return pattern;}//------------------------------------------------------------------------// GfxTilingPattern//------------------------------------------------------------------------GfxTilingPattern *GfxTilingPattern::parse(Object *patObj) {  GfxTilingPattern *pat;  Dict *dict;  int paintTypeA, tilingTypeA;  double bboxA[4], matrixA[6];  double xStepA, yStepA;  Object resDictA;  Object obj1, obj2;  int i;  if (!patObj->isStream()) {    return NULL;  }  dict = patObj->streamGetDict();  if (dict->lookup("PaintType", &obj1)->isInt()) {    paintTypeA = obj1.getInt();  } else {    paintTypeA = 1;    error(-1, "Invalid or missing PaintType in pattern");  }  obj1.free();  if (dict->lookup("TilingType", &obj1)->isInt()) {    tilingTypeA = obj1.getInt();  } else {    tilingTypeA = 1;    error(-1, "Invalid or missing TilingType in pattern");  }  obj1.free();  bboxA[0] = bboxA[1] = 0;  bboxA[2] = bboxA[3] = 1;  if (dict->lookup("BBox", &obj1)->isArray() &&      obj1.arrayGetLength() == 4) {    for (i = 0; i < 4; ++i) {      if (obj1.arrayGet(i, &obj2)->isNum()) {	bboxA[i] = obj2.getNum();      }      obj2.free();    }  } else {    error(-1, "Invalid or missing BBox in pattern");  }  obj1.free();  if (dict->lookup("XStep", &obj1)->isNum()) {    xStepA = obj1.getNum();  } else {    xStepA = 1;    error(-1, "Invalid or missing XStep in pattern");  }  obj1.free();  if (dict->lookup("YStep", &obj1)->isNum()) {    yStepA = obj1.getNum();  } else {    yStepA = 1;    error(-1, "Invalid or missing YStep in pattern");  }  obj1.free();  if (!dict->lookup("Resources", &resDictA)->isDict()) {    resDictA.free();    resDictA.initNull();    error(-1, "Invalid or missing Resources in pattern");  }  matrixA[0] = 1; matrixA[1] = 0;  matrixA[2] = 0; matrixA[3] = 1;  matrixA[4] = 0; matrixA[5] = 0;  if (dict->lookup("Matrix", &obj1)->isArray() &&      obj1.arrayGetLength() == 6) {    for (i = 0; i < 6; ++i) {      if (obj1.arrayGet(i, &obj2)->isNum()) {	matrixA[i] = obj2.getNum();      }      obj2.free();    }  }  obj1.free();  pat = new GfxTilingPattern(paintTypeA, tilingTypeA, bboxA, xStepA, yStepA,			     &resDictA, matrixA, patObj);  resDictA.free();  return pat;}GfxTilingPattern::GfxTilingPattern(int paintTypeA, int tilingTypeA,				   double *bboxA, double xStepA, double yStepA,				   Object *resDictA, double *matrixA,				   Object *contentStreamA):  GfxPattern(1){  int i;  paintType = paintTypeA;  tilingType = tilingTypeA;  for (i = 0; i < 4; ++i) {    bbox[i] = bboxA[i];  }  xStep = xStepA;  yStep = yStepA;  resDictA->copy(&resDict);  for (i = 0; i < 6; ++i) {    matrix[i] = matrixA[i];  }  contentStreamA->copy(&contentStream);}GfxTilingPattern::~GfxTilingPattern() {  resDict.free();  contentStream.free();}GfxPattern *GfxTilingPattern::copy() {  return new GfxTilingPattern(paintType, tilingType, bbox, xStep, yStep,			      &resDict, matrix, &contentStream);}//------------------------------------------------------------------------// GfxShadingPattern//------------------------------------------------------------------------GfxShadingPattern *GfxShadingPattern::parse(Object *patObj) {  Dict *dict;  GfxShading *shadingA;  double matrixA[6];  Object obj1, obj2;  int i;  if (!patObj->isDict()) {    return NULL;  }  dict = patObj->getDict();  dict->lookup("Shading", &obj1);  shadingA = GfxShading::parse(&obj1);  obj1.free();  if (!shadingA) {    return NULL;  }  matrixA[0] = 1; matrixA[1] = 0;  matrixA[2] = 0; matrixA[3] = 1;  matrixA[4] = 0; matrixA[5] = 0;  if (dict->lookup("Matrix", &obj1)->isArray() &&      obj1.arrayGetLength() == 6) {    for (i = 0; i < 6; ++i) {      if (obj1.arrayGet(i, &obj2)->isNum()) {	matrixA[i] = obj2.getNum();      }      obj2.free();    }  }  obj1.free();  return new GfxShadingPattern(shadingA, matrixA);}GfxShadingPattern::GfxShadingPattern(GfxShading *shadingA, double *matrixA):  GfxPattern(2){  int i;  shading = shadingA;

⌨️ 快捷键说明

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