#include "Array.h"
#include "Page.h"
#include "GfxState.h"
+#include "cmyk.h"
//------------------------------------------------------------------------
- 0.114 * color->c[2]);
}
-void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
+/*void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
+ double c,m,y,k,white;
+ c = color->c[0];
+ m = color->c[1];
+ y = color->c[2];
+ k = color->c[3];
+ white = 1.0 - k;
+ rgb->r = white - (c*white);
+ rgb->g = white - (m*white);
+ rgb->b = white - (y*white);
+}*/
+/*void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
double c, m, y, aw, ac, am, ay, ar, ag, ab;
c = clip01(color->c[0] + color->c[3]);
ab = c * m * (1-y);
rgb->r = clip01(aw + 0.9137*am + 0.9961*ay + 0.9882*ar);
rgb->g = clip01(aw + 0.6196*ac + ay + 0.5176*ag);
- rgb->b = clip01(aw + 0.7804*ac + 0.5412*am + 0.0667*ar + 0.2118*ag +
- 0.4863*ab);
+ rgb->b = clip01(aw + 0.7804*ac + 0.5412*am + 0.0667*ar + 0.2118*ag + 0.4863*ab);
+}*/
+void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
+ unsigned char r,g,b;
+ float c = color->c[0];
+ float m = color->c[1];
+ float y = color->c[2];
+ float k = color->c[3];
+ convert_cmyk2rgb(c,m,y,k, &r,&g,&b);
+ rgb->r = r/255.0;
+ rgb->g = g/255.0;
+ rgb->b = b/255.0;
}
void GfxDeviceCMYKColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
double x[gfxColorMaxComps];
double y[gfxColorMaxComps];
int i, j, k;
+ int maxPixelForAlloc;
ok = gTrue;
// bits per component and color space
bits = bitsA;
maxPixel = (1 << bits) - 1;
+ maxPixelForAlloc = (1 << (bits>8?bits:8));
colorSpace = colorSpaceA;
// get decode map
colorSpace2 = indexedCS->getBase();
indexHigh = indexedCS->getIndexHigh();
nComps2 = colorSpace2->getNComps();
- lookup = (double *)gmalloc((maxPixel + 1) * nComps2 * sizeof(double));
+ lookup = (double *)gmalloc((maxPixelForAlloc + 1) * nComps2 * sizeof(double));
lookup2 = indexedCS->getLookup();
colorSpace2->getDefaultRanges(x, y, indexHigh);
for (i = 0; i <= maxPixel; ++i) {
sepCS = (GfxSeparationColorSpace *)colorSpace;
colorSpace2 = sepCS->getAlt();
nComps2 = colorSpace2->getNComps();
- lookup = (double *)gmalloc((maxPixel + 1) * nComps2 * sizeof(double));
+ lookup = (double *)gmalloc((maxPixelForAlloc + 1) * nComps2 * sizeof(double));
sepFunc = sepCS->getFunc();
for (i = 0; i <= maxPixel; ++i) {
x[0] = decodeLow[0] + (i * decodeRange[0]) / maxPixel;
}
}
} else {
- lookup = (double *)gmalloc((maxPixel + 1) * nComps * sizeof(double));
+ lookup = (double *)gmalloc((maxPixelForAlloc + 1) * nComps * sizeof(double));
for (i = 0; i <= maxPixel; ++i) {
for (k = 0; k < nComps; ++k) {
lookup[i*nComps + k] = decodeLow[k] +