📄 splash.cc
字号:
p[3] = (alpha2 * blend[3] + ialpha2 * p[3]) >> 8; break;#if SPLASH_CMYK case splashModeACMYK8: p = &bitmap->data[y * bitmap->rowSize + 5 * x]; (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; p[3] = (alpha2 * blend[3] + ialpha2 * p[3]) >> 8; p[4] = (alpha2 * blend[4] + ialpha2 * p[4]) >> 8; break;#endif } } else { switch (bitmap->mode) { case splashModeMono1: p = &bitmap->data[y * bitmap->rowSize + (x >> 3)]; if (color[0]) { *p |= 0x80 >> (x & 7); } else { *p &= ~(0x80 >> (x & 7)); } break; case splashModeMono8: p = &bitmap->data[y * bitmap->rowSize + x]; p[0] = color[0]; break; case splashModeAMono8: p = &bitmap->data[y * bitmap->rowSize + 2 * x]; p[0] = color[0]; p[1] = color[1]; break; case splashModeRGB8: case splashModeBGR8: p = &bitmap->data[y * bitmap->rowSize + 3 * x]; p[0] = color[0]; p[1] = color[1]; p[2] = color[2]; break; case splashModeARGB8: case splashModeBGRA8:#if SPLASH_CMYK case splashModeCMYK8:#endif p = &bitmap->data[y * bitmap->rowSize + 4 * x]; p[0] = color[0]; p[1] = color[1]; p[2] = color[2]; p[3] = color[3]; break;#if SPLASH_CMYK case splashModeACMYK8: p = &bitmap->data[y * bitmap->rowSize + 5 * x]; p[0] = color[0]; p[1] = color[1]; p[2] = color[2]; p[3] = color[3]; p[4] = color[4]; break;#endif } } updateModX(x); updateModY(y); }}void Splash::drawPixel(int x, int y, SplashPattern *pattern, SplashCoord alpha, GBool noClip) { SplashBlendFunc blendFunc; SplashColor color; SplashColorPtr p; SplashColor dest, blend; int alpha2, ialpha2; Guchar t; if (noClip || state->clip->test(x, y)) { if (alpha != 1 || softMask || state->blendFunc) { blendFunc = state->blendFunc ? state->blendFunc : &blendNormal; pattern->getColor(x, y, color); if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x]); } else { alpha2 = (int)(alpha * 255); } ialpha2 = 255 - alpha2; switch (bitmap->mode) { case splashModeMono1: p = &bitmap->data[y * bitmap->rowSize + (x >> 3)]; dest[0] = (*p >> (7 - (x & 7))) & 1; (*blendFunc)(color, dest, blend, bitmap->mode); t = (alpha2 * blend[0] + ialpha2 * dest[0]) >> 8; if (t) { *p |= 0x80 >> (x & 7); } else { *p &= ~(0x80 >> (x & 7)); } break; case splashModeMono8: p = &bitmap->data[y * bitmap->rowSize + x]; (*blendFunc)(color, p, blend, bitmap->mode); // note: floor(x / 255) = x >> 8 (for 16-bit x) p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; break; case splashModeAMono8: p = &bitmap->data[y * bitmap->rowSize + 2 * x]; (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; break; case splashModeRGB8: case splashModeBGR8: p = &bitmap->data[y * bitmap->rowSize + 3 * x]; (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; break; case splashModeARGB8: case splashModeBGRA8:#if SPLASH_CMYK case splashModeCMYK8:#endif p = &bitmap->data[y * bitmap->rowSize + 4 * x]; (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; p[3] = (alpha2 * blend[3] + ialpha2 * p[3]) >> 8; break;#if SPLASH_CMYK case splashModeACMYK8: p = &bitmap->data[y * bitmap->rowSize + 5 * x]; (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; p[3] = (alpha2 * blend[3] + ialpha2 * p[3]) >> 8; p[4] = (alpha2 * blend[4] + ialpha2 * p[4]) >> 8; break;#endif } } else { pattern->getColor(x, y, color); switch (bitmap->mode) { case splashModeMono1: p = &bitmap->data[y * bitmap->rowSize + (x >> 3)]; if (color[0]) { *p |= 0x80 >> (x & 7); } else { *p &= ~(0x80 >> (x & 7)); } break; case splashModeMono8: p = &bitmap->data[y * bitmap->rowSize + x]; p[0] = color[0]; break; case splashModeAMono8: p = &bitmap->data[y * bitmap->rowSize + 2 * x]; p[0] = color[0]; p[1] = color[1]; break; case splashModeRGB8: case splashModeBGR8: p = &bitmap->data[y * bitmap->rowSize + 3 * x]; p[0] = color[0]; p[1] = color[1]; p[2] = color[2]; break; case splashModeARGB8: case splashModeBGRA8:#if SPLASH_CMYK case splashModeCMYK8:#endif p = &bitmap->data[y * bitmap->rowSize + 4 * x]; p[0] = color[0]; p[1] = color[1]; p[2] = color[2]; p[3] = color[3]; break;#if SPLASH_CMYK case splashModeACMYK8: p = &bitmap->data[y * bitmap->rowSize + 5 * x]; p[0] = color[0]; p[1] = color[1]; p[2] = color[2]; p[3] = color[3]; p[4] = color[4]; break;#endif } } updateModX(x); updateModY(y); }}void Splash::drawSpan(int x0, int x1, int y, SplashPattern *pattern, SplashCoord alpha, GBool noClip) { SplashBlendFunc blendFunc; SplashColor color; SplashColorPtr p; SplashColor dest, blend; Guchar mask, t; int alpha2, ialpha2; int i, j, n; n = x1 - x0 + 1; if (noClip) { updateModX(x0); updateModX(x1); updateModY(y); } if (alpha != 1 || softMask || state->blendFunc) { blendFunc = state->blendFunc ? state->blendFunc : &blendNormal; if (softMask) { alpha2 = ialpha2 = 0; // make gcc happy } else { alpha2 = (int)(alpha * 255); ialpha2 = 255 - alpha2; } switch (bitmap->mode) { case splashModeMono1: p = &bitmap->data[y * bitmap->rowSize + (x0 >> 3)]; i = 0; if (pattern->isStatic()) { pattern->getColor(0, 0, color); if ((j = x0 & 7)) { mask = 0x80 >> j; for (; j < 8 && i < n; ++i, ++j) { if (noClip || state->clip->test(x0 + i, y)) { if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } dest[0] = (*p >> (7 - j)) & 1; (*blendFunc)(color, dest, blend, bitmap->mode); t = (alpha2 * blend[0] + ialpha2 * dest[0]) >> 8; if (t) { *p |= mask; } else { *p &= ~mask; } if (!noClip) { updateModX(x0 + i); updateModY(y); } } mask >>= 1; } ++p; } while (i < n) { mask = 0x80; for (j = 0; j < 8 && i < n; ++i, ++j) { if (noClip || state->clip->test(x0 + i, y)) { if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } dest[0] = (*p >> (7 - j)) & 1; (*blendFunc)(color, dest, blend, bitmap->mode); t = (alpha2 * blend[0] + ialpha2 * dest[0]) >> 8; if (t) { *p |= mask; } else { *p &= ~mask; } if (!noClip) { updateModX(x0 + i); updateModY(y); } } mask >>= 1; } ++p; } } else { if ((j = x0 & 7)) { mask = 0x80 >> j; for (; j < 8 && i < n; ++i, ++j) { if (noClip || state->clip->test(x0 + i, y)) { pattern->getColor(x0 + i, y, color); if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } dest[0] = (*p >> (7 - j)) & 1; (*blendFunc)(color, dest, blend, bitmap->mode); t = (alpha2 * blend[0] + ialpha2 * dest[0]) >> 8; if (t) { *p |= mask; } else { *p &= ~mask; } if (!noClip) { updateModX(x0 + i); updateModY(y); } } mask >>= 1; } ++p; } while (i < n) { mask = 0x80; for (j = 0; j < 8 && i < n; ++i, ++j) { if (noClip || state->clip->test(x0 + i, y)) { pattern->getColor(x0 + i, y, color); if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } dest[0] = (*p >> (7 - j)) & 1; (*blendFunc)(color, dest, blend, bitmap->mode); t = (alpha2 * blend[0] + ialpha2 * dest[0]) >> 8; if (t) { *p |= mask; } else { *p &= ~mask; } if (!noClip) { updateModX(x0 + i); updateModY(y); } } mask >>= 1; } ++p; } } break; case splashModeMono8: p = &bitmap->data[y * bitmap->rowSize + x0]; if (pattern->isStatic()) { pattern->getColor(0, 0, color); for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); *p = (alpha2 * blend[0] + ialpha2 * *p) >> 8; if (!noClip) { updateModX(x0 + i); updateModY(y); } } ++p; } } else { for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { pattern->getColor(x0 + i, y, color); if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); *p = (alpha2 * blend[0] + ialpha2 * *p) >> 8; if (!noClip) { updateModX(x0 + i); updateModY(y); } } ++p; } } break; case splashModeAMono8: p = &bitmap->data[y * bitmap->rowSize + 2 * x0]; if (pattern->isStatic()) { pattern->getColor(0, 0, color); for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; if (!noClip) { updateModX(x0 + i); updateModY(y); } } p += 2; } } else { for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { pattern->getColor(x0 + i, y, color); if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; if (!noClip) { updateModX(x0 + i); updateModY(y); } } p += 2; } } break; case splashModeRGB8: case splashModeBGR8: p = &bitmap->data[y * bitmap->rowSize + 3 * x0]; if (pattern->isStatic()) { pattern->getColor(0, 0, color); for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; if (!noClip) { updateModX(x0 + i); updateModY(y); } } p += 3; } } else { for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { pattern->getColor(x0 + i, y, color); if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; if (!noClip) { updateModX(x0 + i); updateModY(y); } } p += 3; } } break; case splashModeARGB8: case splashModeBGRA8:#if SPLASH_CMYK case splashModeCMYK8:#endif p = &bitmap->data[y * bitmap->rowSize + 4 * x0]; if (pattern->isStatic()) { pattern->getColor(0, 0, color); for (i = 0; i < n; ++i) { if (noClip || state->clip->test(x0 + i, y)) { if (softMask) { alpha2 = (int)(alpha * softMask->data[y * softMask->rowSize + x0 + i]); ialpha2 = 255 - alpha2; } (*blendFunc)(color, p, blend, bitmap->mode); p[0] = (alpha2 * blend[0] + ialpha2 * p[0]) >> 8; p[1] = (alpha2 * blend[1] + ialpha2 * p[1]) >> 8; p[2] = (alpha2 * blend[2] + ialpha2 * p[2]) >> 8; p[3] = (alpha2 * blend[3] + ialpha2 * p[3]) >> 8; if (!noClip) { updateModX(x0 + i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -