<div>Hello Matthias,</div>
<div>&nbsp;</div>
<div>Really appreciate&nbsp;your answer provided! It is very clear, and I get it.</div>
<div>&nbsp;</div>
<div>And I think of other scenarios:</div>
<div>One possible scene, if the picture is scaled up or down on the canvas?</div>
<div>One possible scene, if the user do some changes on the canvas, and then click to get the pixel color?<br>&nbsp;</div>
<div>I think for the first scene, I still can use the method you provided. But for second case, I don&#39;t know how.</div>
<div>I wonder if I can get the bitmap-dc% from Canvas dc, or something similar like that. </div>
<div>Can I get the pixels matrix of the current canvas operated?</div>
<div>&nbsp;</div>
<div>thanks &amp; regards,</div>
<div>Linda Lian</div>
<div>&nbsp;</div>
<div><span class="gmail_quote">On 12/19/07, <b class="gmail_sendername">Matthias Felleisen</b> &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>On Dec 18, 2007, at 5:08 AM, Lian DanHui wrote:<br><br>&gt; Hello,<br>&gt;<br>&gt; I want to implement something like this:
<br>&gt;&nbsp;&nbsp; 1. Display a picture in a Canvas on a Frame;<br>&gt;&nbsp;&nbsp; 2. User can click on the picture;<br>&gt;&nbsp;&nbsp; 3. I want to get the color of the pixel that user clicked;<br>&gt;<br>&gt; For Canvas object,&nbsp;&nbsp;Using what method or what strategy, that I can
<br>&gt; get the pixel info?<br>&gt; Thanks a lot for the help!<br><br>Here is a literal translation of your request into the most basic<br>language. If you are a student and using world.ss, it is simpler. --<br>Matthias<br>
<br>#lang scheme/gui<br><br>;; obtain a bitmap and stick it into a bitmap dc<br>(define plt<br>&nbsp;&nbsp;(make-object bitmap% (build-path (collection-path &quot;icons&quot;)<br>&quot;plt.gif&quot;)))<br>(define bm<br>&nbsp;&nbsp;(new bitmap-dc% [bitmap plt]))
<br><br>;; --- set up a frame with a canvas in which to display this image<br>(define frame<br>&nbsp;&nbsp;(new frame% [label &quot;Test for Linda&quot;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [width (send plt get-width)] [height (send plt get-height)]))<br><br>
(define canvas (new<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; --- create a class on the fly that overrides the<br>callback for<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; --- mouse events in a canvas; you could name it,<br>if needed<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(class canvas%
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; Event -&gt; Void<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;; act on each mouse event<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define/override (on-event e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define kind (send e button-down?))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define x (send e get-x))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define y (send e get-y))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define c (new color%))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when kind<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (send bm get-pixel x y c)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(printf &quot;color is ~s ~s ~s\n&quot;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(send c red) (send c green) (send<br>c blue))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(printf &quot;no color&quot;))))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(super-new))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;--- provide a frame and a paint method for
<br>displaying plt.gif<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[parent frame]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[paint-callback (lambda (e dc) (send dc draw-bitmap<br>plt 0 0))]))<br><br>;; --- run program run<br>(send frame show #t)<br></blockquote></div><br>