original commit: ea0c14dac2966400f5cf26b3ca24367404059f22
This commit is contained in:
Asumu Takikawa 2013-02-19 12:19:40 -05:00
parent 9de9c66763
commit 643ab7d2f1

View File

@ -1,22 +1,24 @@
#lang racket/base
(module gif scheme/base
(require scheme/gui/base
scheme/class
scheme/list
;; A library for creating gifs out of bitmap%s
(require racket/gui/base
racket/class
racket/list
net/gifwrite
racket/contract)
(provide write-gif)
(provide write-gif)
(define (force-bm bm) (if (procedure? bm) (bm) bm))
(define (force-bm bm) (if (procedure? bm) (bm) bm))
(define (split-bytes b len offset)
(define (split-bytes b len offset)
(if (= offset (bytes-length b))
null
(cons (subbytes b offset (+ offset len))
(split-bytes b len (+ offset len)))))
(define (write-gifs bms delay filename one-at-a-time? last-frame-delay loop?)
(define (write-gifs bms delay filename one-at-a-time? last-frame-delay loop?)
(let* ([init (force-bm (car bms))]
[w (send init get-width)]
[h (send init get-height)])
@ -72,10 +74,10 @@
pixelss))
(gif-end gif)))))))))
(define (write-gif bm filename)
(define (write-gif bm filename)
(write-gifs (list bm) #f filename #f #f #f))
(provide/contract
(provide/contract
[write-animated-gif
(->i ((bms (and/c (listof (or/c (is-a?/c bitmap%) (-> (is-a?/c bitmap%)))) pair?))
(delay (integer-in 0 4294967295))
@ -85,10 +87,9 @@
#:loop? (Loop? (delay) (lambda (x) (and delay #t))))
any)])
(define (write-animated-gif bms delay filename
(define (write-animated-gif bms delay filename
#:one-at-a-time? [one-at-a-time? #f]
#:last-frame-delay [last-frame-delay #f]
#:loop? [loop? (and delay #t)])
(write-gifs bms delay filename one-at-a-time? last-frame-delay loop?))
)