[poppler] Branch 'xpdf303merge' - 3 commits - splash/SplashBitmap.cc splash/SplashBitmap.h
Albert Astals Cid
aacid at kemper.freedesktop.org
Wed Aug 31 11:31:21 PDT 2011
splash/SplashBitmap.cc | 47 ++++++++++++++++++++++++++++++-----------------
splash/SplashBitmap.h | 6 ++++++
2 files changed, 36 insertions(+), 17 deletions(-)
New commits:
commit ab9dea663a4df5af8f54c1ff5149254adfd72ce9
Author: Albert Astals Cid <aacid at kde.org>
Date: Wed Aug 31 20:34:17 2011 +0200
xpdf303: Add SplashBitmap::writeAlphaPGMFile and SplashBitmap::takeData
diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index 18ce62c..ab5176e 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
@@ -217,6 +217,20 @@ SplashError SplashBitmap::writePNMFile(FILE *f) {
return splashOk;
}
+SplashError SplashBitmap::writeAlphaPGMFile(char *fileName) {
+ FILE *f;
+
+ if (!alpha) {
+ return splashErrModeMismatch;
+ }
+ if (!(f = fopen(fileName, "wb"))) {
+ return splashErrOpenFile;
+ }
+ fprintf(f, "P5\n%d %d\n255\n", width, height);
+ fwrite(alpha, 1, width * height, f);
+ fclose(f);
+ return splashOk;
+}
void SplashBitmap::getPixel(int x, int y, SplashColorPtr pixel) {
SplashColorPtr p;
@@ -268,6 +282,14 @@ Guchar SplashBitmap::getAlpha(int x, int y) {
return alpha[y * width + x];
}
+SplashColorPtr SplashBitmap::takeData() {
+ SplashColorPtr data2;
+
+ data2 = data;
+ data = NULL;
+ return data2;
+}
+
SplashError SplashBitmap::writeImgFile(SplashImageFileFormat format, char *fileName, int hDPI, int vDPI, const char *compressionString) {
FILE *f;
SplashError e;
diff --git a/splash/SplashBitmap.h b/splash/SplashBitmap.h
index 3336507..8bcc941 100644
--- a/splash/SplashBitmap.h
+++ b/splash/SplashBitmap.h
@@ -65,6 +65,7 @@ public:
SplashError writePNMFile(char *fileName);
SplashError writePNMFile(FILE *f);
+ SplashError writeAlphaPGMFile(char *fileName);
SplashError writeImgFile(SplashImageFileFormat format, char *fileName, int hDPI, int vDPI, const char *compressionString = "");
SplashError writeImgFile(SplashImageFileFormat format, FILE *f, int hDPI, int vDPI, const char *compressionString = "");
@@ -74,6 +75,11 @@ public:
void getRGBLine(int y, SplashColorPtr line);
Guchar getAlpha(int x, int y);
+ // Caller takes ownership of the bitmap data. The SplashBitmap
+ // object is no longer valid -- the next call should be to the
+ // destructor.
+ SplashColorPtr takeData();
+
private:
int width, height; // size of bitmap
commit 6558d735c65a3dca9b9e16de5588c8b8c482f04f
Author: Albert Astals Cid <aacid at kde.org>
Date: Wed Aug 31 20:30:27 2011 +0200
xpdf303: Write faster
diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index 4f9168c..18ce62c 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
@@ -161,11 +161,7 @@ SplashError SplashBitmap::writePNMFile(FILE *f) {
fprintf(f, "P5\n%d %d\n255\n", width, height);
row = data;
for (y = 0; y < height; ++y) {
- p = row;
- for (x = 0; x < width; ++x) {
- fputc(*p, f);
- ++p;
- }
+ fwrite(row, 1, width, f);
row += rowSize;
}
break;
@@ -174,13 +170,7 @@ SplashError SplashBitmap::writePNMFile(FILE *f) {
fprintf(f, "P6\n%d %d\n255\n", width, height);
row = data;
for (y = 0; y < height; ++y) {
- p = row;
- for (x = 0; x < width; ++x) {
- fputc(splashRGB8R(p), f);
- fputc(splashRGB8G(p), f);
- fputc(splashRGB8B(p), f);
- p += 3;
- }
+ fwrite(row, 1, 3 * width, f);
row += rowSize;
}
break;
commit a9b26d9c35fccc7b46a96acdb2064a9976bd49bd
Author: Albert Astals Cid <aacid at kde.org>
Date: Wed Aug 31 20:29:58 2011 +0200
xpdf303: Only free data if there is data to free
diff --git a/splash/SplashBitmap.cc b/splash/SplashBitmap.cc
index 8d30c7e..4f9168c 100644
--- a/splash/SplashBitmap.cc
+++ b/splash/SplashBitmap.cc
@@ -111,12 +111,13 @@ SplashBitmap::SplashBitmap(int widthA, int heightA, int rowPadA,
}
}
-
SplashBitmap::~SplashBitmap() {
- if (rowSize < 0) {
- gfree(data + (height - 1) * rowSize);
- } else {
- gfree(data);
+ if (data) {
+ if (rowSize < 0) {
+ gfree(data + (height - 1) * rowSize);
+ } else {
+ gfree(data);
+ }
}
gfree(alpha);
}
More information about the poppler
mailing list