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

📄 tinyjpeg.c

📁 M8手机图片查看器
💻 C
📖 第 1 页 / 共 4 页
字号:
  p = priv->plane[1];  s = priv->Cb;  for (i=0; i<8; i+=2)   {     for (j=0; j<8; j+=2, s+=2)       *p++ = *s;     s += 8; /* Skip one line */     p += priv->width/2 - 4;   }  p = priv->plane[2];  s = priv->Cr;  for (i=0; i<8; i+=2)   {     for (j=0; j<8; j+=2, s+=2)       *p++ = *s;     s += 8; /* Skip one line */     p += priv->width/2 - 4;   }}/** *  YCrCb -> YUV420P (2x1) *  .-------. *  | 1 | 2 | *  `-------' */static void YCrCB_to_YUV420P_2x1(struct jdec_private *priv){  unsigned char *p;  const unsigned char *s, *y1;  unsigned int i;  p = priv->plane[0];  y1 = priv->Y;  for (i=0; i<8; i++)   {     memcpy(p, y1, 16);     p += priv->width;     y1 += 16;   }  p = priv->plane[1];  s = priv->Cb;  for (i=0; i<8; i+=2)   {     memcpy(p, s, 8);     s += 16; /* Skip one line */     p += priv->width/2;   }  p = priv->plane[2];  s = priv->Cr;  for (i=0; i<8; i+=2)   {     memcpy(p, s, 8);     s += 16; /* Skip one line */     p += priv->width/2;   }}/** *  YCrCb -> YUV420P (1x2) *  .---. *  | 1 | *  |---| *  | 2 | *  `---' */static void YCrCB_to_YUV420P_1x2(struct jdec_private *priv){  const unsigned char *s, *y;  unsigned char *p;  int i,j;  p = priv->plane[0];  y = priv->Y;  for (i=0; i<16; i++)   {     memcpy(p, y, 8);     p+=priv->width;     y+=8;   }  p = priv->plane[1];  s = priv->Cb;  for (i=0; i<8; i++)   {     for (j=0; j<8; j+=2, s+=2)       *p++ = *s;     p += priv->width/2 - 4;   }  p = priv->plane[2];  s = priv->Cr;  for (i=0; i<8; i++)   {     for (j=0; j<8; j+=2, s+=2)       *p++ = *s;     p += priv->width/2 - 4;   }}/** *  YCrCb -> YUV420P (2x2) *  .-------. *  | 1 | 2 | *  |---+---| *  | 3 | 4 | *  `-------' */static void YCrCB_to_YUV420P_2x2(struct jdec_private *priv){  unsigned char *p;  const unsigned char *s, *y1;  unsigned int i;  p = priv->plane[0];  y1 = priv->Y;  for (i=0; i<16; i++)   {     memcpy(p, y1, 16);     p += priv->width;     y1 += 16;   }  p = priv->plane[1];  s = priv->Cb;  for (i=0; i<8; i++)   {     memcpy(p, s, 8);     s += 8;     p += priv->width/2;   }  p = priv->plane[2];  s = priv->Cr;  for (i=0; i<8; i++)   {     memcpy(p, s, 8);     s += 8;     p += priv->width/2;   }}/** *  YCrCb -> RGB24 (1x1) *  .---. *  | 1 | *  `---' */static void YCrCB_to_RGB24_1x1(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = priv->width*3 - 8*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       y  = (*Y++) << SCALEBITS;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> BGR24 (1x1) *  .---. *  | 1 | *  `---' */static void YCrCB_to_BGR24_1x1(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = priv->width*3 - 8*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       y  = (*Y++) << SCALEBITS;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> RGB24 (2x1) *  .-------. *  | 1 | 2 | *  `-------' */static void YCrCB_to_RGB24_2x1(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = priv->width*3 - 16*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       y  = (*Y++) << SCALEBITS;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       y  = (*Y++) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/* *  YCrCb -> BGR24 (2x1) *  .-------. *  | 1 | 2 | *  `-------' */static void YCrCB_to_BGR24_2x1(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = priv->width*3 - 16*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> RGB24 (1x2) *  .---. *  | 1 | *  |---| *  | 2 | *  `---' */static void YCrCB_to_RGB24_1x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = 2*priv->width*3 - 8*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       y  = (Y[8-1]) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);    }    Y += 8;    p += offset_to_next_row;    p2 += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/* *  YCrCb -> BGR24 (1x2) *  .---. *  | 1 | *  |---| *  | 2 | *  `---' */static void YCrCB_to_BGR24_1x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = 2*priv->width*3 - 8*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       y  = (Y[8-1]) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);    }    Y += 8;    p += offset_to_next_row;    p2 += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> RGB24 (2x2) *  .-------. *  | 1 | 2 | *  |---+---| *  | 3 | 4 | *  `-------' */static void YCrCB_to_RGB24_2x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;

⌨️ 快捷键说明

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