mirror of
https://github.com/scottdraves/flam3.git
synced 2025-01-21 13:30:04 -05:00
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
This commit is contained in:
parent
26f5c53f09
commit
b358966b64
@ -213,9 +213,9 @@ int main(int argc, char **argv) {
|
|||||||
f.bytes_per_channel = 1;
|
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].width *
|
||||||
(size_t)cps[0].height * f.bytes_per_channel);
|
(size_t)cps[0].height * f.bytes_per_channel, sizeof(char));
|
||||||
|
|
||||||
if (dtime < 1) {
|
if (dtime < 1) {
|
||||||
fprintf(stderr, "dtime must be positive, not %d.\n", dtime);
|
fprintf(stderr, "dtime must be positive, not %d.\n", dtime);
|
||||||
|
@ -295,7 +295,7 @@ int main(int argc, char **argv) {
|
|||||||
if (last_size != -1)
|
if (last_size != -1)
|
||||||
free(image);
|
free(image);
|
||||||
last_size = this_size;
|
last_size = this_size;
|
||||||
image = (void *) malloc(this_size);
|
image = (void *) calloc(this_size, sizeof(char));
|
||||||
if (NULL==image) {
|
if (NULL==image) {
|
||||||
fprintf(stderr,"Error allocating memory for image. Aborting\n");
|
fprintf(stderr,"Error allocating memory for image. Aborting\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -351,7 +351,7 @@ int main(int argc, char **argv) {
|
|||||||
sprintf(fname, "%s%05d.%s", prefix, i, format);
|
sprintf(fname, "%s%05d.%s", prefix, i, format);
|
||||||
}
|
}
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
fprintf(stderr, "writing %s...", fname);
|
fprintf(stderr, "writing %s...", fname);
|
||||||
}
|
}
|
||||||
fp = fopen(fname, "wb");
|
fp = fopen(fname, "wb");
|
||||||
if (NULL == fp) {
|
if (NULL == fp) {
|
||||||
@ -381,8 +381,8 @@ int main(int argc, char **argv) {
|
|||||||
fprintf(fp, "P6\n");
|
fprintf(fp, "P6\n");
|
||||||
fprintf(fp, "%d %d\n255\n", cps[i].width, real_height);
|
fprintf(fp, "%d %d\n255\n", cps[i].width, real_height);
|
||||||
if (this_size != fwrite((unsigned char *)image, 1, this_size, fp)) {
|
if (this_size != fwrite((unsigned char *)image, 1, this_size, fp)) {
|
||||||
perror(fname);
|
perror(fname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Free string */
|
/* Free string */
|
||||||
free(fpc.genome);
|
free(fpc.genome);
|
||||||
|
11
src/png.c
11
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]);
|
im[i] = htons(im[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (pngcom_enable==1)
|
if (pngcom_enable==1)
|
||||||
png_set_text(png_ptr, info_ptr, text, FLAM3_PNG_COM);
|
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_write_end(png_ptr, info_ptr);
|
||||||
png_destroy_write_struct(&png_ptr, &info_ptr);
|
png_destroy_write_struct(&png_ptr, &info_ptr);
|
||||||
free(rows);
|
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
|
#define SIG_CHECK_SIZE 8
|
||||||
|
Loading…
Reference in New Issue
Block a user