View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001903 | Scribus | OS-PPCOSX | public | 2005-04-22 01:18 | 2013-09-04 20:55 |
| Reporter | wordtech | Assigned To | cbradney | ||
| Priority | normal | Severity | major | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Platform | PPC | OS | OS X | OS Version | 10.3.8 |
| Product Version | 1.3.0cvs | ||||
| Summary | 0001903: PDF export issue with JPEG color on OSX Aqua | ||||
| Description | Color in exported JPEGs does not reproduce correctly. Grayscale jpegs appear with a blueish cast. RGB JPEGS also appear blueish in tone. Exporting a page as a graphic (PNG) reproduces the color correctly. | ||||
| Steps To Reproduce | Use pre-alpha Scribus/Aqua build. Import JPEG. Export as PDF with default settings, with color configured for "printer." View PDF. | ||||
| Additional Information | The attached zip file includes two jpegs to illustrate the problem. "Cover-from-pdf.jpg" has the bluish cast in the photos. "Cover-from-png.jpg" has the correct colors: the grayscale photo reproduces as grayscale, and the front cover photo retains its full color range, including reds and yellows. The source file is > 17 mb, and cannot be uploaded. | ||||
| Tags | No tags attached. | ||||
| Attached Files | scimage.diff (6,737 bytes)
Index: scribus/scimage.cpp
===================================================================
RCS file: /cvs/Scribus/scribus/Attic/scimage.cpp,v
retrieving revision 1.1.2.16
diff -u -p -r1.1.2.16 scimage.cpp
--- scribus/scimage.cpp 7 May 2005 15:14:39 -0000 1.1.2.16
+++ scribus/scimage.cpp 22 May 2005 21:11:28 -0000
@@ -872,10 +876,10 @@ QString ScImage::ImageToCMYK()
int y = 255 - qBlue(r);
int k = QMIN(QMIN(c, m), y);
*s = qRgba(m - k, y - k, k, c - k);
- ImgStr += c - k;
- ImgStr += m - k;
- ImgStr += y - k;
- ImgStr += k;
+ ImgStr += static_cast<char> (c - k);
+ ImgStr += static_cast<char> (m - k);
+ ImgStr += static_cast<char> (y - k);
+ ImgStr += static_cast<char> (k);
s++;
}
}
@@ -920,10 +924,10 @@ QString ScImage::ImageToCMYK_PDF(bool pr
int y = qBlue(r);
int k = qAlpha(r);
/* *s = qRgba(m, y, k, c); */
- ImgStr += c;
- ImgStr += m;
- ImgStr += y;
- ImgStr += k;
+ ImgStr += static_cast<char> (c);
+ ImgStr += static_cast<char> (m);
+ ImgStr += static_cast<char> (y);
+ ImgStr += static_cast<char> (k);
s++;
}
}
@@ -941,15 +945,15 @@ QString ScImage::ImageToCMYK_PDF(bool pr
int y = 255 - qBlue(r);
int k = QMIN(QMIN(c, m), y);
// *s = qRgba(m, y, k, c);
- *s = qRgba(c, m, y, k);
- ImgStr += c - k;
- ImgStr += m - k;
- ImgStr += y - k;
- ImgStr += k;
+// *s = qRgba(c, m, y, k);
+ ImgStr += static_cast<char> (c - k);
+ ImgStr += static_cast<char> (m - k);
+ ImgStr += static_cast<char> (y - k);
+ ImgStr += static_cast<char> (k);
s++;
}
}
}
return ImgStr;
}
@@ -972,23 +977,23 @@ QString ScImage::ImageToCMYK_PS(int pl,
int k = qAlpha(r);
if (pl == -1)
{
- ImgStr += c;
- ImgStr += m;
- ImgStr += y;
- ImgStr += k;
+ ImgStr += static_cast<char> (c);
+ ImgStr += static_cast<char> (m);
+ ImgStr += static_cast<char> (y);
+ ImgStr += static_cast<char> (k);
}
else
{
if (pl == -2)
- ImgStr += QMIN(255, qRound(0.3 * c + 0.59 * m + 0.11 * y + k));
+ ImgStr += static_cast<char> (QMIN(255, qRound(0.3 * c + 0.59 * m + 0.11 * y + k)));
if (pl == 1)
- ImgStr += c;
+ ImgStr += static_cast<char> (c);
if (pl == 2)
- ImgStr += m;
+ ImgStr += static_cast<char> (m);
if (pl == 3)
- ImgStr += y;
+ ImgStr += static_cast<char> (y);
if (pl == 0)
- ImgStr += k;
+ ImgStr += static_cast<char> (k);
}
}
}
@@ -1007,27 +1012,27 @@ QString ScImage::ImageToCMYK_PS(int pl,
int k = QMIN(QMIN(c, m), y);
if (pl == -1)
{
- ImgStr += c - k;
- ImgStr += m - k;
- ImgStr += y - k;
- ImgStr += k;
+ ImgStr += static_cast<char> (c - k);
+ ImgStr += static_cast<char> (m - k);
+ ImgStr += static_cast<char> (y - k);
+ ImgStr += static_cast<char> (k);
}
else
{
if (pl == -2)
- ImgStr += QMIN(255, qRound(0.3 * c + 0.59 * m + 0.11 * y + k));
+ ImgStr += static_cast<char> (QMIN(255, qRound(0.3 * c + 0.59 * m + 0.11 * y + k)));
if (pl == 1)
- ImgStr += c - k;
+ ImgStr += static_cast<char> (c - k);
if (pl == 2)
- ImgStr += m - k;
+ ImgStr += static_cast<char> (m - k);
if (pl == 3)
- ImgStr += y - k;
+ ImgStr += static_cast<char> (y - k);
if (pl == 0)
- ImgStr += k;
+ ImgStr += static_cast<char> (k);
}
}
}
}
return ImgStr;
}
@@ -2775,10 +2781,12 @@ bool ScImage::LoadPicture(QString fn, QS
for( int yi=0; yi < hi; ++yi )
{
QRgb *s = (QRgb*)(image.scanLine( yi ));
+ QRgb alphaFF = qRgba(255,255,255,255);
+ QRgb alpha00 = qRgba(255,255,255, 0);
for(int xi=0; xi < wi; ++xi )
{
- if((*s) == 0xffffffff)
- (*s) &= 0x00ffffff;
+ if((*s) == alphaFF)
+ (*s) &= alpha00;
s++;
}
}
@@ -3130,7 +3138,7 @@ bool ScImage::LoadPicture(QString fn, QS
{
for (int i = 0; i < height(); i++)
{
- unsigned int *ptr = (unsigned int *) scanLine(i);
+ QRgb *ptr = (QRgb*) scanLine(i);
unsigned char c, m, y ,k;
if ((cinfo.jpeg_color_space == JCS_YCCK) || ((cinfo.jpeg_color_space == JCS_CMYK) && (cinfo.saw_Adobe_marker)))
{
@@ -3141,10 +3149,7 @@ bool ScImage::LoadPicture(QString fn, QS
m = p[1];
y = p[2];
k = p[3];
- p[0] = 255 - y;
- p[1] = 255 - m;
- p[2] = 255 - c;
- p[3] = 255 - k;
+ *ptr = qRgba(255 - y, 255 - m, 255 - c, 255 - k);
ptr++;
}
}
@@ -3157,10 +3162,7 @@ bool ScImage::LoadPicture(QString fn, QS
m = p[1];
y = p[2];
k = p[3];
- p[0] = y;
- p[1] = m;
- p[2] = c;
- p[3] = k;
+ *ptr = qRgba(y, m, c, k);
ptr++;
}
}
@@ -3283,9 +3285,10 @@ bool ScImage::LoadPicture(QString fn, QS
// which will still contain the black channel
if (isCMYK && requestType != 0 && !bilevel)
{
- unsigned int *p = (unsigned int *) ptr;
+ QRgb *p = (QRgb *) ptr;
+ QRgb alphaFF = qRgba(0,0,0,255);
for (int j = 0; j < width(); j++, p++)
- *p |= 0xff000000;
+ *p |= alphaFF;
}
}
@@ -3305,20 +3308,15 @@ bool ScImage::LoadPicture(QString fn, QS
{
for (int i = 0; i < height(); i++)
{
- unsigned int *ptr = (unsigned int *) scanLine(i);
+ QRgb *ptr = (QRgb *) scanLine(i);
unsigned char c, m, y ,k;
for (int j = 0; j < width(); j++)
{
- unsigned char *p = (unsigned char *) ptr;
- c = 255 - p[0];
- m = 255 - p[1];
- y = 255 - p[2];
+ c = 255 - qRed(*ptr);
+ m = 255 - qGreen(*ptr);
+ y = 255 - qBlue(*ptr);
k = QMIN(QMIN(c, m), y);
- p[0] = c - k;
- p[1] = m - k;
- p[2] = y - k;
- p[3] = k;
- ptr++;
+ *ptr++ = qRgba(c,m,y,k);
}
}
}
@@ -3329,19 +3327,15 @@ bool ScImage::LoadPicture(QString fn, QS
{
for (int i = 0; i < height(); i++)
{
- unsigned int *ptr = (unsigned int *) scanLine(i);
- unsigned char r, g, b;
+ QRgb *ptr = (QRgb *) scanLine(i);
+ unsigned char r, g, b, k;
for (int j = 0; j < width(); j++)
{
- unsigned char *p = (unsigned char *) ptr;
- r = 255 - QMIN(255, p[0] + p[3]);
- g = 255 - QMIN(255, p[1] + p[3]);
- b = 255 - QMIN(255, p[2] + p[3]);
- p[0] = r;
- p[1] = g;
- p[2] = b;
- p[3] = 255;
- ptr++;
+ k = qAlpha(*ptr);
+ r = 255 - QMIN(255, qRed(*ptr) + k);
+ g = 255 - QMIN(255, qGreen(*ptr) + k);
+ b = 255 - QMIN(255, qBlue(*ptr) + k);
+ *ptr++ = qRgba(r,g,b,255);
}
}
}
| ||||
| Patch | |||||
|
|
Is it possible to upload at least a small sample pdf with these jpg files? If not, what are your settings when you export to pdf? |
|
|
Is it possible for you to upload the source file for us to test to a website? or if not, please email directly to me.. cbradney@scribus.info. |
|
|
Looks ok here on Linux. Endian issue? |
|
|
The attached patch fixes most problems for me. The PS output is too dark, though, as if the K component was added twice. Haven't changed anything with the TIFF loading code, but I suspect Endianness issues there, also. I also noticed that the parameters "useEmbedded" and "renderingIntent" for loadPicture() appear to be swapped in pdflib.cpp. Franz? |
|
|
please test if this problem persists in the 1.3.3.7aqua release candidate: http://aqua.scribus.net/ScribusAqua-2007-01-12.tar.gz This is a bundle which contains all needed libraries, built on 10.4.8. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2005-04-22 01:18 | wordtech | New Issue | |
| 2005-04-22 01:18 | wordtech | File Added: covers.zip | |
| 2005-04-22 03:50 | fschmid | Note Added: 0004356 | |
| 2005-04-22 07:13 | cbradney | Note Added: 0004357 | |
| 2005-04-22 20:34 | cbradney | Summary | PDF export => PDF export issue with JPEG color on OSX Aqua |
| 2005-04-22 21:12 | cbradney | File Added: perfectmatch.jpg | |
| 2005-04-22 21:12 | cbradney | Note Added: 0004369 | |
| 2005-05-15 21:51 |
|
Assigned To | => avox |
| 2005-05-15 21:51 |
|
Status | new => assigned |
| 2005-05-26 14:38 | avox | File Added: scimage.diff | |
| 2005-05-26 14:47 | avox | Note Added: 0004786 | |
| 2005-05-26 14:47 | avox | Assigned To | avox => fschmid |
| 2005-05-26 18:28 | mhanski | Relationship added | related to 0002015 |
| 2005-06-06 11:48 | cbradney | Category | Import / Export => MacOSX |
| 2005-10-01 11:17 | avox | Relationship added | related to 0002064 |
| 2006-10-14 22:17 | mhanski | Relationship added | child of 0004413 |
| 2007-01-12 21:48 | avox | Note Added: 0014781 | |
| 2007-01-12 21:48 | avox | Assigned To | fschmid => avox |
| 2007-01-12 21:48 | avox | Status | assigned => feedback |
| 2013-09-04 20:55 | cbradney | Status | feedback => resolved |
| 2013-09-04 20:55 | cbradney | Resolution | open => fixed |
| 2013-09-04 20:55 | cbradney | Status | resolved => closed |
| 2013-09-04 20:55 | cbradney | Assigned To | avox => cbradney |
| 2014-10-08 18:38 | Kunda | Category | PPCOSX => OS-PPCOSX |