Я пытался написать свой собственный put-pixel на (Gdk) pixbuf в Лиспе. Когда я наконец понял, как я могу работать с указателями C в CL, возникло новое препятствие - (gdk: pixbuf-get-пиксели 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)))