예제 #1
0
 protected ActionResult GetImage(IImageQuery imageQuery, long id, Func <byte[], byte[]> imageModifier = null)
 {
     if (IdValidator.IsInvalid(id))
     {
         return(new EmptyResult());
     }
     byte[] image = imageQuery.GetImageById(id);
     return(ImageToFile(imageModifier, image));
 }
예제 #2
0
        public ImgurImageSource(IImageQuery query, CancellationToken cancelToken)
        {
            _query         = query;
            _queryResolver = new ImgurQueryResolver();

            QueueLoadOfCachedFiles();

            StartDownloadingImages(cancelToken);
        }
예제 #3
0
        private void QueryBinaryAlgo(IImageQuery imageQuery, string queryImagePath, object setting)
        {
            btnSelectQueryImage.IsEnabled = false;
            btnQueryImage.IsEnabled       = false;

            var disphacher = this.Dispatcher;

            WriteQueryStatus("Start querying...");
            List <ImageRecord> searchImage = new List <ImageRecord>();

            System.Threading.Tasks.Task queryTask = System.Threading.Tasks.Task.Factory.StartNew(
                () =>
            {
                _stopWatch  = Stopwatch.StartNew();
                searchImage = imageQuery.QueryImage(queryImagePath, setting);
                _stopWatch.Stop();
                return(new
                {
                    SearchImage = searchImage,
                    TimeLapse = _stopWatch.ElapsedMilliseconds
                });
            });

            System.Threading.Tasks.Task waitTask = System.Threading.Tasks.Task.Factory.StartNew(
                () =>
            {
                //const int incr = 1;
                //int t = incr; string msg = "";
                //while (!queryTask.Wait(incr * 500))
                //{
                //    msg = string.Format("Query is taking more than {0} second...", t);
                //    WriteQueryStatus(msg);
                //    t += incr;
                //}

                queryTask.Wait();
                disphacher.Invoke((Action)(() =>
                {
                    ImageList.ItemsSource = searchImage;
                    lblTotalCount.Text = searchImage.Count.ToString();
                    lblQueryStatus.Text = string.Format("Image Query Completed, it took {0} ms", _stopWatch.ElapsedMilliseconds);
                    btnSelectQueryImage.IsEnabled = true;
                    btnQueryImage.IsEnabled = true;
                }));
            });
        }
예제 #4
0
        public Task <IImageQueryResult> ExecuteQuery(IImageQuery imageQuery, CancellationToken cancelToken)
        {
            return(Task.Run(async() =>
            {
                var result = new ImgurQueryResult();

                try
                {
                    using (HttpClient client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                        //var url = @"https://api.imgur.com/3/gallery/search/top//1";
                        var url = $@"https://api.imgur.com/3/gallery/search//{_page}";
                        var query = FormatQueryString(Tuple.Create("q", imageQuery.QueryString));
                        client.DefaultRequestHeaders.Add("Authorization", ImgurClientToken);

                        _page++;

                        using (HttpResponseMessage response = await client.GetAsync($"{url}{query}"))
                        {
                            response.EnsureSuccessStatusCode();
                            string responseBody = await response.Content.ReadAsStringAsync();

                            JObject json = JObject.Parse(responseBody);
                            result.Parse(json);
                        }
                    }
                }
                catch (Exception ex)
                {
                    System.Console.WriteLine(ex.ToString());
                }

                return result as IImageQueryResult;
            }));
        }
 /// <summary>
 /// Construct a WebImageFinder using the specified IImageQuery provider 
 /// </summary>
 public WebImageFinder(IImageQuery provider)
 {
     _queryProvider = provider;
 }
예제 #6
0
        private void QueryBinaryAlgo(IImageQuery imageQuery, string queryImagePath, object setting)
        {
            btnSelectQueryImage.IsEnabled = false;
            btnQueryImage.IsEnabled = false;

            var disphacher = this.Dispatcher;
            WriteQueryStatus("Start querying...");
            List<ImageRecord> searchImage = new List<ImageRecord>();

            System.Threading.Tasks.Task queryTask = System.Threading.Tasks.Task.Factory.StartNew(
                () =>
                {
                    _stopWatch = Stopwatch.StartNew();
                    searchImage = imageQuery.QueryImage(queryImagePath, setting);
                    _stopWatch.Stop();
                    return new
                    {
                        SearchImage = searchImage,
                        TimeLapse = _stopWatch.ElapsedMilliseconds
                    };
                });

            System.Threading.Tasks.Task waitTask = System.Threading.Tasks.Task.Factory.StartNew(
                () =>
                {
                    //const int incr = 1;
                    //int t = incr; string msg = "";
                    //while (!queryTask.Wait(incr * 500))
                    //{
                    //    msg = string.Format("Query is taking more than {0} second...", t);
                    //    WriteQueryStatus(msg);
                    //    t += incr;
                    //}

                    queryTask.Wait();
                    disphacher.Invoke((Action)(() =>
                    {
                        ImageList.ItemsSource = searchImage;
                        lblTotalCount.Text = searchImage.Count.ToString();
                        lblQueryStatus.Text = string.Format("Image Query Completed, it took {0} ms", _stopWatch.ElapsedMilliseconds);
                        btnSelectQueryImage.IsEnabled = true;
                        btnQueryImage.IsEnabled = true;
                    }));
                });
        }
예제 #7
0
        private void QueryImage(string queryImagePath)
        {
            try
            {
                ImageList.ItemsSource = null;
                if (!string.IsNullOrEmpty(queryImagePath))
                {
                    object setting = null;
                    QueryImageFullPath = queryImagePath;
                    IImageQuery imageQuery = null;
                    switch (SelectedAlgo)
                    {
                    case emAlgo.Undetermined:
                        MessageBox.Show("Please select Algorithm for indexing");
                        return;

                    case emAlgo.pHash:
                        imageQuery = new pHashQuery();
                        QueryBinaryAlgo(imageQuery, queryImagePath, setting);
                        break;

                    case emAlgo.RBGHistogram:
                        imageQuery = new RGBProjectQuery();
                        QueryBinaryAlgo(imageQuery, queryImagePath, setting);
                        break;

                    case emAlgo.bhattacharyya:
                        imageQuery = new BhattacharyyaQuery();
                        QueryBinaryAlgo(imageQuery, queryImagePath, setting);
                        break;

                    case emAlgo.CEDD:
                        emCEDDAlgo selectedCeddAlgo = GetSelectedCEDDAlgo();
                        if (selectedCeddAlgo == emCEDDAlgo.BKTree)
                        {
                            imageQuery = new CEDDQuery2();
                        }
                        else
                        {
                            imageQuery = new CEDDQuery();
                        }
                        int goodMatchDistance = nudCEDDGoodMatchThreshold.Value.Value;
                        QueryBinaryAlgo(imageQuery, queryImagePath, goodMatchDistance);
                        break;

                    case emAlgo.SURF:
                    case emAlgo.AccordSurf:
                    case emAlgo.Locate:
                        QueryBgWorker.RunWorkerAsync();
                        break;

                    default:
                        MessageBox.Show("Algorithm not currently supported");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error in Image Query", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
예제 #8
0
 /// <summary>
 /// Construct a WebImageFinder using the specified IImageQuery provider
 /// </summary>
 public WebImageFinder(IImageQuery provider)
 {
     _queryProvider = provider;
 }