그래서 어떤 점이있는 픽셀의 색을 결정하는 함수를 만들거나 만들려고합니다. 어떤 아이디어 일지/어떻게 Drracket에서 만들 수 있습니까? 포인트를 이동하는 픽셀의 색상을 찾은 다음 색상이 새로운 것으로 변경되면 색상을 변경하려고합니다.라켓에있는 픽셀의 색상을 결정하는 기능은 무엇입니까?
답변
bitmap-dc
은 get-pixel
방법을 갖는다.
big-bang의 on-mouse에서 image-> color-list를 사용하고 list-ref를 사용하여 특정 지점을 얻을 수 있습니다.
(define img (circle 20 'solid 'red))
(define width (image-width img))
(define height (image-height img))
(define (color-indexes l)
(if (empty? l) empty (cons (take l width)
;r-rest not a function but it drops width items
;from a list.You will have to make that
(color-indexes (r-rest l width)))))
;put this where you want the color
(list-ref (list-ref (image->color-list) (sub1 x)))(sub1 y))
그 이상의 것이 있습니다. 목록의 색상 배치는 이미지의 폭과 높이에 따라 다릅니다. 'x'와'y' 좌표 만있는 경우 어떻게 목록의 위치를 얻으실 수 있습니까? –
이미지 너비를 알고있는 경우 이미지 너비와 목록을 사용하는 함수를 만듭니다. 하나의리스트 (2 차원 배열)에 여러 개의리스트를 추가 할 수 있도록 모든 너비 항목의 기능 그룹을 새 목록으로 만드십시오. 예를 들어'(take lst (sub1 width))'그러면 목록이 비어있을 때까지 재귀 적으로이 작업을 수행 할 수 있습니다. 그런 다음'(list-ref (list-ref lst (sub1 x)) (sub1 y)))'를 사용하여 원하는 정확한 픽셀을 얻습니다. 우리가 1을 빼는 이유는 인덱스가 0에서 시작하기 때문입니다. –
아니요, 더 나은 방법은'y' 좌표에 너비를 곱하고'x' 좌표를 추가하는 것입니다. 또한'x'와'y'가 0 인덱싱 된 경우'sub1'에 대한 필요성도 없습니다. 그것을 개선하기 위해 답을 편집하십시오. –
당신이 2htdp/image
를 사용하는 경우, 당신은 image->color-list
을 사용해야합니다. 그러나이 목록은 x
및 y
좌표로 색상을 표시하지 않습니다. 이미지 너비를 고려하여 목록 내의 픽셀 위치를 계산해야합니다. 반환되는 색상 목록은 맨 위부터 맨 위까지 오른쪽에서부터 시작하여 다음 행을 아래에서 왼쪽에서 오른쪽으로 차례대로 행을 가로 질러 이동합니다. (x,y)
에 대한 그 목록에서
(0부터 인덱스의) 위치가 x + width*y
, 또는 :
(+ x (* width y))
맥락에서
:
;; get-pixel : Image Number Number -> Color
(define (get-pixel img x y)
(list-ref (image->color-list img)
(+ x (* (image-width img) y))))
당신이'2htdp/image'을'pict'를 사용하고, 'racket/draw' 또는 다른 이미지 라이브러리? –
2htdp/image를 사용하고 있습니다. –