在Racket中从HSV提取hue值报错,求正确提取方法
如何从Racket的hsv-color结构中提取色相(hue)值?
我正在开发一个将RGB颜色值转换为HSV,然后仅从中提取hue值进行操作的程序。编写的代码如下:
(define mycolor (make-color 12 168 45)) (define myhsv (color->hsv mycolor)) (define my-hue (vector-ref myhsv 0)) (displayln my-hue)
运行后返回如下错误:
vector-ref: contract violation expected: vector? given: (hsv-color 115/312 13/14 56/85 1.0) context...:
请问若后续要对hue值进行操作,正确的提取方式是什么?
解决方案
你用vector-ref出错是因为color->hsv返回的不是向量,而是hsv-color结构体,Racket对这类结构体提供了专门的访问器函数来获取各个分量:
hsv-color-hue:提取色相值hsv-color-saturation:提取饱和度值hsv-color-value:提取明度值hsv-color-alpha:提取透明度值
修正后的代码:
(define mycolor (make-color 12 168 45)) (define myhsv (color->hsv mycolor)) (define my-hue (hsv-color-hue myhsv)) ; 用结构体访问器替代vector-ref (displayln my-hue)
运行这段代码就能正确拿到色相值,之后直接对my-hue做数值操作即可。
内容的提问来源于stack exchange,提问作者JoshLeonthe1st
相关产品推荐
相关产品推荐

