[cl-gd-devel] Loading Images from Pointers

Christoph Senjak christoph.senjak at googlemail.com
Wed May 19 10:28:01 UTC 2010


2010/5/19 Hans Hübner <hans.huebner at gmail.com>:
> Hi Christoph,
>
> implementing an interface to gdImageCreateFrom.*Ptr shouldn't be hard,
> but I wonder where you'd get your pointers from?  If you could supply
> some sample code and data, we may be able to help you out.
>
> -Hans

Hello.

I am loading the files into an array of (unsigned-byte 8):

(defun si (var val)
  (setf (symbol-value (intern var)) val))
(defun init-file (file)
  "Load a file into a Variable. Access with |filename| (without .png
and path)."
  (si (pathname-name file)
      (with-open-file (in file :element-type '(unsigned-byte 8))
        (let* ((length (file-length in))
               (content (make-array (list length)
                                    :element-type '(unsigned-byte 8)
                                    :adjustable nil)))
          (read-sequence content in)
          content))))

The reason I am doing this is that I dont like to have more external
files than necessary, and want them in my core-dump. SDL can load
these byte-arrays with

(sdl-image:load-image x :image-type :PNG :alpha 1)

what it actually does is

(defmethod load-image ((source VECTOR) &key color-key alpha
(image-type nil) (force nil) (free-rwops $
  "Creates and returns a new surface from the image contained in the
byte VECTOR in `SOURCE`."
  (declare (ignore free-rwops))
  (load-image (sdl::create-RWops-from-byte-array source)
              :color-key color-key
              :color-key-at color-key-at
              :alpha alpha
              :image-type image-type
              :force force :free-rwops t))
where
(defun create-RWops-from-byte-array (array)
  "Creates and returns a new `RWOPS` object from the Lisp array `ARRAY`."
  (let ((mem-array (cffi:foreign-alloc :unsigned-char :initial-contents array)))
    (make-instance 'rwops :fp (sdl-cffi::sdl-rw-from-mem mem-array
(length array)))))

which should be about the same lisp-magick does.

Christoph




More information about the Cl-gd-devel mailing list