public int PickSprite(int x, int y) { var sc = SourceImage.GetPixelRowSpan(y)[x]; double g = Helpers.ToGray(sc); double sg = (SpriteGrayMax - SpriteGrayMin) / (SourceGrayMax - SourceGrayMin) * (g - SourceGrayMin) + SpriteGrayMin ; //Log.Debug("Pick x="+x+" y="+y+" sg="+sg+" [" // +"("+SpriteGrayMax+" - "+SpriteGrayMin+")" // +" / ("+SourceGrayMax+" - "+SourceGrayMin+")" // +" * ("+g+" - "+SourceGrayMin+") + "+SpriteGrayMin // +"]"); //Log.Debug(sg+" = ("+SpriteGrayMax+" - "+SpriteGrayMin+") / ("+SourceGrayMax+" - "+SourceGrayMin+") * "+g); //find closest sprite gray to sg int index = FindClosestIndex(SpriteGrayMap, sg); //Log.Debug("index = "+index+" "+SpriteGrayMap.Count); return(SpriteGrayMap[index].Index); }