aboutsummaryrefslogtreecommitdiff
path: root/pnm/write.scm
diff options
context:
space:
mode:
Diffstat (limited to 'pnm/write.scm')
-rw-r--r--pnm/write.scm25
1 files changed, 25 insertions, 0 deletions
diff --git a/pnm/write.scm b/pnm/write.scm
new file mode 100644
index 0000000..038bf82
--- /dev/null
+++ b/pnm/write.scm
@@ -0,0 +1,25 @@
+(define-library (pnm write)
+ (export image-write)
+ (import (scheme base)
+ (pnm image))
+ (begin
+ (define (image-write image out)
+ (define (write-string-u8 str)
+ (string-for-each (lambda (c) (write-u8 (char->integer c) out))
+ str))
+ (case (image-type image)
+ ((ppm)
+ (write-string-u8 "P6\n"))
+ ((pgm)
+ (write-string-u8 "P5\n"))
+ (else
+ (error "(pnm write) pnm-write: Not supported type" (image-type image))))
+ (write-string-u8 (number->string (image-width image)))
+ (write-string-u8 "\n")
+ (write-string-u8 (number->string (image-height image)))
+ (write-string-u8 "\n")
+ (case (image-type image)
+ ((pgm ppm)
+ (write-string-u8 (number->string (image-maxval image)))
+ (write-string-u8 "\n")))
+ (write-bytevector (image-data image) out))))