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

📄 pdf_colorspace2.c.svn-base

📁 SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多KB)
💻 SVN-BASE
字号:
#include "fitz.h"#include "mupdf.h"/* * Optimized color conversions for Device colorspaces */static void fastgraytorgb(fz_pixmap *src, fz_pixmap *dst){	unsigned char *s = src->samples;	unsigned char *d = dst->samples;	int n = src->w * src->h;	while (n--)	{		d[0] = s[0];		d[1] = s[1];		d[2] = s[1];		d[3] = s[1];		s += 2;		d += 4;	}}static void fastgraytocmyk(fz_pixmap *src, fz_pixmap *dst){	unsigned char *s = src->samples;	unsigned char *d = dst->samples;	int n = src->w * src->h;	while (n--)	{		d[0] = s[0];		d[1] = 0;		d[2] = 0;		d[3] = 0;		d[4] = s[1];		s += 2;		d += 5;	}}static void fastrgbtogray(fz_pixmap *src, fz_pixmap *dst){	unsigned char *s = src->samples;	unsigned char *d = dst->samples;	int n = src->w * src->h;	while (n--)	{		d[0] = s[0];		d[1] = ((s[1]+1) * 77 + (s[2]+1) * 150 + (s[3]+1) * 28) >> 8;		s += 4;		d += 2;	}}static void fastrgbtocmyk(fz_pixmap *src, fz_pixmap *dst){	unsigned char *s = src->samples;	unsigned char *d = dst->samples;	int n = src->w * src->h;	while (n--)	{		unsigned char c = 255 - s[1];		unsigned char m = 255 - s[2];		unsigned char y = 255 - s[3];		unsigned char k = MIN(c, MIN(m, y));		d[0] = s[0];		d[1] = c - k;		d[2] = m - k;		d[3] = y - k;		d[4] = k;		s += 4;		d += 5;	}}static void fastcmyktogray(fz_pixmap *src, fz_pixmap *dst){	unsigned char *s = src->samples;	unsigned char *d = dst->samples;	int n = src->w * src->h;	while (n--)	{		unsigned char c = fz_mul255(s[1], 77);		unsigned char m = fz_mul255(s[2], 150);		unsigned char y = fz_mul255(s[3], 28);		d[0] = s[0];		d[1] = 255 - MIN(c + m + y + s[4], 255);		s += 5;		d += 2;	}}static void fastcmyktorgb(fz_pixmap *src, fz_pixmap *dst){	unsigned char *s = src->samples;	unsigned char *d = dst->samples;	int n = src->w * src->h;	while (n--)	{		d[0] = s[0];		d[1] = 255 - MIN(s[1] + s[4], 255);		d[2] = 255 - MIN(s[2] + s[4], 255);		d[3] = 255 - MIN(s[3] + s[4], 255);		s += 5;		d += 4;	}}void pdf_convpixmap(fz_colorspace *ss, fz_pixmap *sp, fz_colorspace *ds, fz_pixmap *dp){	pdf_logimage("convert pixmap from %s to %s\n", ss->name, ds->name);	if (ss == pdf_devicegray)	{		if (ds == pdf_devicergb) fastgraytorgb(sp, dp);		else if (ds == pdf_devicecmyk) fastgraytocmyk(sp, dp);		else fz_stdconvpixmap(ss, sp, ds, dp);	}	else if (ss == pdf_devicergb)	{		if (ds == pdf_devicegray) fastrgbtogray(sp, dp);		else if (ds == pdf_devicecmyk) fastrgbtocmyk(sp, dp);		else fz_stdconvpixmap(ss, sp, ds, dp);	}	else if (ss == pdf_devicecmyk)	{		if (ds == pdf_devicegray) fastcmyktogray(sp, dp);		else if (ds == pdf_devicergb) fastcmyktorgb(sp, dp);		else fz_stdconvpixmap(ss, sp, ds, dp);	}	else fz_stdconvpixmap(ss, sp, ds, dp);}void pdf_convcolor(fz_colorspace *ss, float *sv, fz_colorspace *ds, float *dv){	if (ss == pdf_devicegray)	{		if (ds == pdf_devicergb)		{			dv[0] = sv[0];			dv[1] = sv[0];			dv[2] = sv[0];		}		else if (ds == pdf_devicecmyk)		{			dv[0] = 0;			dv[1] = 0;			dv[2] = 0;			dv[3] = sv[0];		}		else			fz_stdconvcolor(ss, sv, ds, dv);	}	else if (ss == pdf_devicergb)	{		if (ds == pdf_devicegray)		{			dv[0] = sv[0] * 0.3 + sv[1] * 0.59 + sv[2] * 0.11;		}		else if (ds == pdf_devicecmyk)		{			float c = 1.0 - sv[1];			float m = 1.0 - sv[2];			float y = 1.0 - sv[3];			float k = MIN(c, MIN(m, y));			dv[0] = c - k;			dv[1] = m - k;			dv[2] = y - k;			dv[3] = k;		}		else			fz_stdconvcolor(ss, sv, ds, dv);	}	else if (ss == pdf_devicecmyk)	{		if (ds == pdf_devicegray)		{			float c = sv[1] * 0.3;			float m = sv[2] * 0.59;			float y = sv[2] * 0.11;			dv[0] = 1.0 - MIN(c + m + y + sv[3], 1.0);		}		else if (ds == pdf_devicergb)		{			dv[0] = 1.0 - MIN(sv[0] + sv[3], 1.0);			dv[1] = 1.0 - MIN(sv[1] + sv[3], 1.0);			dv[2] = 1.0 - MIN(sv[2] + sv[3], 1.0);		}		else			fz_stdconvcolor(ss, sv, ds, dv);	}	else		fz_stdconvcolor(ss, sv, ds, dv);}

⌨️ 快捷键说明

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