2017-12-10 28 views
0

그래서 어떤 점이있는 픽셀의 색을 결정하는 함수를 만들거나 만들려고합니다. 어떤 아이디어 일지/어떻게 Drracket에서 만들 수 있습니까? 포인트를 이동하는 픽셀의 색상을 찾은 다음 색상이 새로운 것으로 변경되면 색상을 변경하려고합니다.라켓에있는 픽셀의 색상을 결정하는 기능은 무엇입니까?

+0

당신이'2htdp/image'을'pict'를 사용하고, 'racket/draw' 또는 다른 이미지 라이브러리? –

+1

2htdp/image를 사용하고 있습니다. –

답변

0

bitmap-dcget-pixel 방법을 갖는다.

0

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)) 
+0

그 이상의 것이 있습니다. 목록의 색상 배치는 이미지의 폭과 높이에 따라 다릅니다. 'x'와'y' 좌표 만있는 경우 어떻게 목록의 위치를 ​​얻으실 수 있습니까? –

+0

이미지 너비를 알고있는 경우 이미지 너비와 목록을 사용하는 함수를 만듭니다. 하나의리스트 (2 차원 배열)에 여러 개의리스트를 추가 할 수 있도록 모든 너비 항목의 기능 그룹을 새 목록으로 만드십시오. 예를 들어'(take lst (sub1 width))'그러면 목록이 비어있을 때까지 재귀 적으로이 작업을 수행 할 수 있습니다. 그런 다음'(list-ref (list-ref lst (sub1 x)) (sub1 y)))'를 사용하여 원하는 정확한 픽셀을 얻습니다. 우리가 1을 빼는 이유는 인덱스가 0에서 시작하기 때문입니다. –

+0

아니요, 더 나은 방법은'y' 좌표에 너비를 곱하고'x' 좌표를 추가하는 것입니다. 또한'x'와'y'가 0 인덱싱 된 경우'sub1'에 대한 필요성도 없습니다. 그것을 개선하기 위해 답을 편집하십시오. –

0

당신이 2htdp/image를 사용하는 경우, 당신은 image->color-list을 사용해야합니다. 그러나이 목록은 xy 좌표로 색상을 표시하지 않습니다. 이미지 너비를 고려하여 목록 내의 픽셀 위치를 계산해야합니다. 반환되는 색상 목록은 맨 위부터 맨 위까지 오른쪽에서부터 시작하여 다음 행을 아래에서 왼쪽에서 오른쪽으로 차례대로 행을 가로 질러 이동합니다. (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))))