2017-12-10 13 views
0

私は、特定のポイントがあるピクセルの色、それが何であるか/ Drracketでそれを作る方法を決める関数を見つけたり、作成しようとしていますか?私はそれを作ろうとしているので、ポイントが移動しているピクセルの色を見つけて、色が新しい色に変わったらそれを探します。ラケット内のピクセルの色を決定する機能はありますか?

+0

あなたは2htdp/image' '、' pict'を使用しています、 'racket/draw'や他のイメージライブラリ? –

+1

私は2htdp/imageを使用しています –

答えて

0

bitmap-dcは、get-pixelの方法を有する。

0

big-bangのオンマウスでは、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

イメージの幅を知っている場合は、イメージの幅とリストを取る関数を作成します。複数のリストを1つのリスト(2次元配列)にまとめるために、幅のある項目すべてを新しいリストにまとめます。例えば ​​'(take lst(sub1 width))'次に、リストが空になるまでこれを再帰的に行うことができます。そして '(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)ため、そのリスト内の

(ゼロから始まるインデックス)位置が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)))) 
関連する問題