1

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?

tintin
  • 739
  • 3
  • 15
  • 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) – Kuba Sep 10 '13 at 06:03
  • @Kuba,tks, as you said, I fixed the problem, it works well now – tintin Sep 10 '13 at 06:05

1 Answers1

2

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

tintin
  • 739
  • 3
  • 15