summaryrefslogtreecommitdiff
path: root/image.c
diff options
context:
space:
mode:
Diffstat (limited to 'image.c')
-rw-r--r--image.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/image.c b/image.c
index 73ac957..9ab12c9 100644
--- a/image.c
+++ b/image.c
@@ -23,6 +23,7 @@
#include <assert.h>
#include <stdlib.h>
#include <string.h>
+#include <png.h>
#include "image.h"
#include "utils.h"
@@ -179,3 +180,27 @@ image_convert(struct image *dst, const struct image *src)
}
}
}
+
+void
+image_save(const struct image *image, const char *name)
+{
+ png_image pimage;
+ memset(&pimage, 0, sizeof(pimage));
+ pimage.version = PNG_IMAGE_VERSION;
+ pimage.width = image->width;
+ pimage.height = image->height;
+ switch(image->format) {
+ case IMAGE_FORMAT_SGRBG8:
+ pimage.format = PNG_FORMAT_GRAY;
+ break;
+ case IMAGE_FORMAT_XBGR32:
+ pimage.format = PNG_FORMAT_BGRA;
+ break;
+ default:
+ assert(0);
+ }
+ int r = png_image_write_to_file(&pimage, name, 0,
+ image->pixels, image->stride, NULL);
+ if (r == 0)
+ utils_fatal("can not write image: %s", pimage.message);
+}