コード例 #1
0
ファイル: TileImageLoader.WPF.cs プロジェクト: balbarak/omap
        private static bool GetCachedImage(string cacheKey, out ImageSource image)
        {
            image = null;

            var buffer = Cache.Get(cacheKey) as byte[];

            if (buffer != null)
            {
                try
                {
                    using (var memoryStream = new MemoryStream(buffer))
                    {
                        image = ImageLoader.FromStream(memoryStream);
                    }

                    DateTime expiration = DateTime.MinValue;

                    if (buffer.Length >= 16 && Encoding.ASCII.GetString(buffer, buffer.Length - 16, 8) == "EXPIRES:")
                    {
                        expiration = new DateTime(BitConverter.ToInt64(buffer, buffer.Length - 8), DateTimeKind.Utc);
                    }

                    return(expiration > DateTime.UtcNow);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("{0}: {1}", cacheKey, ex.Message);
                }
            }

            return(false);
        }
コード例 #2
0
ファイル: TileImageLoader.WPF.cs プロジェクト: balbarak/omap
        private static ImageSource DownloadImage(Uri uri, string cacheKey)
        {
            ImageSource image = null;

            try
            {
                var request = WebRequest.CreateHttp(uri);

                if (HttpUserAgent != null)
                {
                    request.UserAgent = HttpUserAgent;
                }

                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    if (response.Headers["X-VE-Tile-Info"] != "no-tile") // set by Bing Maps
                    {
                        using (var responseStream = response.GetResponseStream())
                            using (var memoryStream = new MemoryStream())
                            {
                                responseStream.CopyTo(memoryStream);
                                memoryStream.Seek(0, SeekOrigin.Begin);
                                image = ImageLoader.FromStream(memoryStream);

                                if (cacheKey != null)
                                {
                                    SetCachedImage(cacheKey, memoryStream, GetExpiration(response.Headers));
                                }
                            }
                    }
                }
            }
            catch (WebException ex)
            {
                Debug.WriteLine("{0}: {1}: {2}", uri, ex.Status, ex.Message);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("{0}: {1}", uri, ex.Message);
            }

            return(image);
        }
コード例 #3
0
ファイル: TileImageLoader.WPF.cs プロジェクト: balbarak/omap
        private static ImageSource LoadImage(string path)
        {
            ImageSource image = null;

            if (File.Exists(path))
            {
                try
                {
                    using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                    {
                        image = ImageLoader.FromStream(fileStream);
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("{0}: {1}", path, ex.Message);
                }
            }

            return(image);
        }