如何在Scheme中将十进制转换为十六进制?(需要在GIMP中将RGB转换为HEX)



如何在Scheme中将十进制转换为十六进制?

在之后,需要将GIF中的RGB转换为HEX以用于JSON

(set! imgcolor (car (gimp-color-picker image newDraw 1 1 TRUE TRUE 1)))

书赋。结果现在是RGB类似:(255 255 255(

在托盘出口.scm中找到答案由Barak Itkin 编写

; For all the operations below, this is the order of respectable digits:
(define conversion-digits (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
"a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
"l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
"w" "x" "y" "z"))

; Converts a decimal number to another base. The returned number is a string
(define (convert-decimal-to-base num base)
(if (< num base) 
(list-ref conversion-digits num) 
(let loop ((val num)
(order (inexact->exact (truncate (/ (log num) 
(log base)))))
(result ""))
(let* ((power (expt base order))
(digit (quotient val power)))
(if (zero? order)
(string-append result (list-ref conversion-digits digit)) 
(loop (- val (* digit power))
(pred order)
(string-append result (list-ref conversion-digits digit))))))))

; Convert a color to a hexadecimal string
; '(255 255 255) => "#ffffff"
(define (color-rgb-to-hexa-decimal color)
(string-append "#"
(pre-pad-number
(convert-decimal-to-base (car color) 16) 2 "0")
(pre-pad-number
(convert-decimal-to-base (cadr color) 16) 2 "0")
(pre-pad-number
(convert-decimal-to-base (caddr color) 16) 2 "0")
)
)
; Присваеваем HEX переменной 
(set! imgcolorHEX (color-rgb-to-hexa-decimal imgcolor)) 

最新更新