1
$\begingroup$

This question already has an answer here:

I want to get the Pixel value of an image.and here is my code

DynamicModule[{p = {50, 50}},
  {Show[img, Graphics[Locator[Dynamic[p]]]], 
                 ImageValue[img, Dynamic[p]]}]

and it came up with a warning that p is with a non integer value, to solve the problem ,I used Floor to get an integer value

DynamicModule[{p = {50, 50}},
  {Show[img, Graphics[Locator[Dynamic[p]]]], 
                 ImageValue[img,Floor/@Dynamic[p]]}]

this time it still doesnt work, with a warning:

    ImageValue::imgrng: The specified argument Floor[p$20303] should be a pair of real or      integer numbers or a list of those.

My question is ,can I strict the loactor to Integer Domain?or is there any more elegent way to deal with this problem?

$\endgroup$

marked as duplicate by Mr.Wizard Jan 15 '15 at 15:06

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • $\begingroup$ The approach is almost good. However Dynamic[p] has Head Dynamic and some functions are not able to cooperate with it so you have to move Dynamic outside. You may also want to take a look at related locator on a png file. (pay attention to the coordinates which are relevant in your case) $\endgroup$ – Kuba Sep 10 '13 at 6:03
  • $\begingroup$ @Kuba,tks, as you said, I fixed the problem, it works well now $\endgroup$ – tintin Sep 10 '13 at 6:05
2
$\begingroup$

Kuda's help is quite useful, it helps me to fix the problem,

The thing is that Floor[Dynamic[p]]would not work properly, so ImageValue can't be updated.

So, After moving the Dynamicout side the ImageValue,it works

DynamicModule[{p = {50, 50}},
    {Show[img, Graphics[Locator[Dynamic[p]]]], 
       Dynamic[ImageValue[img, Floor /@ p]]}]

enter image description here

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.