[poppler] 2 commits - splash/SplashBitmap.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Fri Aug 7 15:48:54 PDT 2009
splash/SplashBitmap.cc | 76 ++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 60 insertions(+), 16 deletions(-)
New commits:
commit e2c319ba18ab473fd969db9519a9231be67538c3
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat Aug 8 00:48:18 2009 +0200
Also implement mono so that -mono in pdftoppm -png works
Totally not optimized
diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index 1364706..25a71a0 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
@@ -263,7 +263,7 @@ SplashError SplashBitmap::writePNGFile(FILE *f) {
error(-1, "PNG support not compiled in");
return splashErrGeneric;
#else
- if (mode != splashModeRGB8 && mode != splashModeMono8) {
+ if (mode != splashModeRGB8 && mode != splashModeMono8 && mode != splashModeMono1) {
error(-1, "unsupported SplashBitmap mode");
return splashErrGeneric;
}
@@ -315,6 +315,27 @@ SplashError SplashBitmap::writePNGFile(FILE *f) {
}
break;
+ case splashModeMono1:
+ {
+ png_byte *row = new png_byte[3 * width];
+ for (int y = 0; y < height; y++) {
+ // Convert into a PNG row
+ for (int x = 0; x < width; x++) {
+ getPixel(x, y, &row[3*x]);
+ row[3*x+1] = row[3*x];
+ row[3*x+2] = row[3*x];
+ }
+
+ if (!writer->writeRow(&row)) {
+ delete[] row;
+ delete writer;
+ return splashErrGeneric;
+ }
+ }
+ delete[] row;
+ }
+ break;
+
default:
// can't happen
break;
commit c669e7f3ca421265e78161cc3fdecd2a0c7510c9
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat Aug 8 00:38:50 2009 +0200
Support splashModeMono8 in writePNGFile
Works though is non optimal
diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index 84328f2..1364706 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
@@ -263,39 +263,62 @@ SplashError SplashBitmap::writePNGFile(FILE *f) {
error(-1, "PNG support not compiled in");
return splashErrGeneric;
#else
- if (mode != splashModeRGB8) {
+ if (mode != splashModeRGB8 && mode != splashModeMono8) {
error(-1, "unsupported SplashBitmap mode");
return splashErrGeneric;
}
- SplashColorPtr row;
-
PNGWriter *writer = new PNGWriter();
if (!writer->init(f, width, height)) {
delete writer;
return splashErrGeneric;
}
- png_bytep *row_pointers = new png_bytep[height];
switch (mode) {
- case splashModeRGB8:
- row = data;
-
- for (int y = 0; y < height; ++y) {
- row_pointers[y] = row;
- row += rowSize;
- }
- if (!writer->writePointers(row_pointers)) {
+ case splashModeRGB8:
+ {
+ SplashColorPtr row;
+ png_bytep *row_pointers = new png_bytep[height];
+ row = data;
+
+ for (int y = 0; y < height; ++y) {
+ row_pointers[y] = row;
+ row += rowSize;
+ }
+ if (!writer->writePointers(row_pointers)) {
+ delete[] row_pointers;
+ delete writer;
+ return splashErrGeneric;
+ }
delete[] row_pointers;
- delete writer;
- return splashErrGeneric;
}
break;
- default:
+
+ case splashModeMono8:
+ {
+ png_byte *row = new png_byte[3 * width];
+ for (int y = 0; y < height; y++) {
+ // Convert into a PNG row
+ for (int x = 0; x < width; x++) {
+ row[3*x] = data[y * rowSize + x];
+ row[3*x+1] = data[y * rowSize + x];
+ row[3*x+2] = data[y * rowSize + x];
+ }
+
+ if (!writer->writeRow(&row)) {
+ delete[] row;
+ delete writer;
+ return splashErrGeneric;
+ }
+ }
+ delete[] row;
+ }
+ break;
+
+ default:
// can't happen
break;
}
- delete[] row_pointers;
if (writer->close()) {
delete writer;
More information about the poppler
mailing list