diff options
Diffstat (limited to 'pnm/pgm.scm')
-rw-r--r-- | pnm/pgm.scm | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/pnm/pgm.scm b/pnm/pgm.scm index 6c32dea..0f448f6 100644 --- a/pnm/pgm.scm +++ b/pnm/pgm.scm @@ -28,19 +28,18 @@ (when (or (< maxval 0) (< 65536 maxval)) (error "(pnm pgm) make-pgm: maxval is out of range")) - (let ((data (make-bytevector (* width - height - (if (< maxval 256) - 1 - 2)) - 0))) + (let* ((byte-count (* width height + (if (< maxval 256) + 1 + 2))) + (data (make-bytevector byte-count 0))) (make-pgm-image width height maxval data))) ((width height maxval data) (when (or (< maxval 0) (< 65536 maxval)) (error "(pnm pgm) make-pgm: maxval is out of range")) (if (< maxval 256) - (let () + (let ((byte-count (* width height))) (define (xy->idx x y) (+ x (* y width))) (define (pixel-getter x y) (let ((idx (xy->idx x y))) @@ -48,8 +47,10 @@ (define (pixel-setter x y v) (let ((idx (xy->idx x y))) (bytevector-u8-set! data idx v))) + (unless (= byte-count (bytevector-length data)) + (error (string-append "(pnm pbm) make-pbm-image: Invalid bytevector length" byte-count))) (make-image 'pgm width height maxval data pixel-getter pixel-setter)) - (let () + (let ((byte-count (* width height 2))) (define (xy->idx x y) (+ x (* y width))) (define (pixel-getter x y) (let ((idx (xy->idx x y))) @@ -60,6 +61,8 @@ (let-values (((v1 v2) (split-value v))) (bytevector-u8-set! data idx v1) (bytevector-u8-set! data (+ idx 1) v2)))) + (unless (= byte-count (bytevector-length data)) + (error (string-append "(pnm pbm) make-pbm-image: Invalid bytevector length" byte-count))) (make-image 'pgm width height maxval data pixel-getter pixel-setter)))))) (define (split-value v) |