我试图在 Lisp 中的 (Gdk) pixbuf 上编写自己的 put-pixel。当我终于意识到如何在 CL 中操作 C 指针时,出现了新的障碍 - (gdk:pixbuf-get-pixels pb) 返回负数。我的问题是:我可以以某种方式将其转换为有效指针吗?我尝试使用 cffi:convert-from-foreign 和 cffi:translate-from-foreign (它们之间有什么区别?)失败了。
以下是我的实际(不工作)代码:
(defun put-pixel (pixbuf x y r g b)
(let ((p (+ (gdk:pixbuf-get-pixels pixbuf) (* x (gdk:pixbuf-get-n-channels pixbuf)) (* y (gdk:pixbuf-get-rowstride pixbuf)))))
(setf (cffi:mem-aref p :unsigned-char 0) r)
(setf (cffi:mem-aref p :unsigned-char 1) g)
(setf (cffi:mem-aref p :unsigned-char 2) b)))