public Image GetImageFromCache(GMapType type, Point pos, int zoom, string language) { Image ret = null; try { StringBuilder dir = new StringBuilder(tileCache); dir.AppendFormat("{0}{1}{2}{3}{4}{5}{6}{7}", zoom, Path.DirectorySeparatorChar, language, Path.DirectorySeparatorChar, pos.X, Path.DirectorySeparatorChar, pos.Y, Path.DirectorySeparatorChar); { dir.AppendFormat("{0}.png", type.ToString()); } if(File.Exists(dir.ToString())) { FileInfo f = new FileInfo(dir.ToString()); if(f.Length == 0) { f.Delete(); } else { using(FileStream s = f.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) { ret = Image.FromStream(s); s.Close(); } } } } catch { ret = null; } return ret; }
public void CacheImage(Image tile, GMapType type, Point pos, int zoom, string language) { try { using(tile) { StringBuilder dir = new StringBuilder(tileCache); dir.AppendFormat("{0}{1}{2}{3}{4}{5}{6}{7}", zoom, Path.DirectorySeparatorChar, language, Path.DirectorySeparatorChar, pos.X, Path.DirectorySeparatorChar, pos.Y, Path.DirectorySeparatorChar); string d = dir.ToString(); // precrete dir if(!Directory.Exists(d)) { Directory.CreateDirectory(d); } // save { dir.AppendFormat("{0}.png", type.ToString()); using(FileStream s = File.Open(dir.ToString(), FileMode.Create, FileAccess.Write, FileShare.None)) { tile.Save(s, System.Drawing.Imaging.ImageFormat.Png); s.Flush(); s.Close(); } // remove crap FileInfo f = new FileInfo(dir.ToString()); if(f.Length == 0) { File.Delete(dir.ToString()); } } } } catch { } }