最近在做一個WP7的用戶端,中間涉及到了從互連網上擷取圖片,而手機的無線網路其實很慢的(哪怕是聯通的3G我也沒感覺有多麼快),所以緩衝我想還是必不可少的吧。
其實做在WP7上面做緩衝很容易,直接上代碼了:
<Image Height="150" Canvas.Left="8" Canvas.Top="8" Width="150" Source="{Binding PicID, Converter={StaticResource ImageConverter}, Mode=OneWay}"/>
圖片Image控制項主要就是Source屬性的設定,綁定圖片的ID,並且設定好Converter。
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ImageSource source = ImageCache.GetImage(value.ToString());
return source;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return "";
}
}
Converter中其實沒什麼太多內容,主要是把PICID傳遞給緩衝類,下面是緩衝代碼:
public class ImageCache
{
public static Dictionary<string, ImageSource> ImageSources = new Dictionary<string, ImageSource>();
static ImageCache()
{
ImageSources.Add("", new BitmapImage(new Uri(StaticResource.PathNoImage, UriKind.Relative)));
}
public static ImageSource GetImage(string imageId)
{
if (!ImageSources.ContainsKey(imageId))
{
ImageSource source = new BitmapImage(new Uri(StaticResource.UrlPicture + imageId));
ImageSources.Add(imageId, source);
}
return ImageSources[imageId];
}
}
我的這個緩衝只是在記憶體中開了一個Dictionary<string, ImageSource>來進行緩衝的,當然大家有興趣還可以使用隔離儲存空間來儲存圖片。
再補充一點:在mango裡(之前版本沒試過呢),從網路上擷取圖片不用很費勁的去寫Http請求了,直接
ImageSource source = new BitmapImage(new Uri("圖片的http地址"));
就可以啦。