summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Reckase <e.reckase@gmail.com>2010-11-21 02:05:12 +0000
committerScott Draves <spot@draves.org>2015-02-15 12:20:13 -0500
commitb358966b64ccf5b25a8e5f92e0e2c15901454652 (patch)
tree8ac818cc3a30a64530bbc5ec17a6275cac0ae016
parent26f5c53f097f58cbd11e00c30c31e1dfec3ece7b (diff)
downloadpucket-b358966b64ccf5b25a8e5f92e0e2c15901454652.tar.gz
pucket-b358966b64ccf5b25a8e5f92e0e2c15901454652.tar.bz2
pucket-b358966b64ccf5b25a8e5f92e0e2c15901454652.zip
16 bpc PNG images were not being written properly when strips were being used. while png_set_swap() is supposed to tell the system to reverse the order of the bits when writing the file, I was unable to get this to work, so I resorted to a brute-force reversal of the bits - but then forgot to put the bits BACK. This is not a problem for single strips, but with multiple strips things get very confused. png_set_swap would make this a non-issue.
git-svn-id: https://flam3.googlecode.com/svn/trunk@88 77852712-ef1d-11de-8684-7d64432d61a3
-rw-r--r--src/flam3-animate.c4
-rw-r--r--src/flam3-render.c8
-rwxr-xr-xsrc/png.c11
3 files changed, 15 insertions, 8 deletions
diff --git a/src/flam3-animate.c b/src/flam3-animate.c
index 7f00676..402e3ee 100644
--- a/src/flam3-animate.c
+++ b/src/flam3-animate.c
@@ -213,9 +213,9 @@ int main(int argc, char **argv) {
f.bytes_per_channel = 1;
- image = (void *) malloc((size_t)channels *
+ image = (void *) calloc((size_t)channels *
(size_t)cps[0].width *
- (size_t)cps[0].height * f.bytes_per_channel);
+ (size_t)cps[0].height * f.bytes_per_channel, sizeof(char));
if (dtime < 1) {
fprintf(stderr, "dtime must be positive, not %d.\n", dtime);
diff --git a/src/flam3-render.c b/src/flam3-render.c
index 11b69cf..7273fdb 100644
--- a/src/flam3-render.c
+++ b/src/flam3-render.c
@@ -295,7 +295,7 @@ int main(int argc, char **argv) {
if (last_size != -1)
free(image);
last_size = this_size;
- image = (void *) malloc(this_size);
+ image = (void *) calloc(this_size, sizeof(char));
if (NULL==image) {
fprintf(stderr,"Error allocating memory for image. Aborting\n");
exit(1);
@@ -351,7 +351,7 @@ int main(int argc, char **argv) {
sprintf(fname, "%s%05d.%s", prefix, i, format);
}
if (verbose) {
- fprintf(stderr, "writing %s...", fname);
+ fprintf(stderr, "writing %s...", fname);
}
fp = fopen(fname, "wb");
if (NULL == fp) {
@@ -381,8 +381,8 @@ int main(int argc, char **argv) {
fprintf(fp, "P6\n");
fprintf(fp, "%d %d\n255\n", cps[i].width, real_height);
if (this_size != fwrite((unsigned char *)image, 1, this_size, fp)) {
- perror(fname);
- }
+ perror(fname);
+ }
}
/* Free string */
free(fpc.genome);
diff --git a/src/png.c b/src/png.c
index 1bdba5f..8eee7c7 100755
--- a/src/png.c
+++ b/src/png.c
@@ -106,8 +106,6 @@ void write_png(FILE *file, void *image, int width, int height, flam3_img_comment
im[i] = htons(im[i]);
}
}
-
-
if (pngcom_enable==1)
png_set_text(png_ptr, info_ptr, text, FLAM3_PNG_COM);
@@ -117,6 +115,15 @@ void write_png(FILE *file, void *image, int width, int height, flam3_img_comment
png_write_end(png_ptr, info_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr);
free(rows);
+
+ /* Swap back the bytes in case we're doing strips */
+ if (2==bpc && testbe != htons(testbe)) {
+ unsigned short *im = (unsigned short *)image;
+ for (i=0; i<height*width*4; i++) {
+ im[i] = htons(im[i]);
+ }
+ }
+
}
#define SIG_CHECK_SIZE 8