ورود

View Full Version : آموزش:دانلود تصویر از اینترنت و نمایش آن به صورت دایره ای(گرد)



mhn143
جمعه 19 دی 1393, 21:07 عصر
سلام با کلاس زیر می تونید هم عکس از اینترنت دانلود کنید و هم به صورت گرد عکستون رو نمایش بدید

127417
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.Graphics;
using Android.Graphics.Drawables;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;

public class ImageHelper
{
static string baseDir = System.Environment.GetFolderPath(System.Environmen t.SpecialFolder.Personal);
private static bool NeedsDownload(string uid)
{
return !File.Exists(System.IO.Path.Combine(baseDir, uid));
}
private static Bitmap GetRoundedCornerBitmap(Bitmap bitmap, int pixels)
{
Bitmap output = null;

try
{
output = Bitmap.CreateBitmap(bitmap.Width, bitmap.Height, Bitmap.Config.Argb8888);
Canvas canvas = new Canvas(output);

Color color = new Color(66, 66, 66);
Paint paint = new Paint();
Rect rect = new Rect(0, 0, bitmap.Width, bitmap.Height);
RectF rectF = new RectF(rect);
float roundPx = pixels;

paint.AntiAlias = true;
canvas.DrawARGB(0, 0, 0, 0);
paint.Color = color;
canvas.DrawRoundRect(rectF, roundPx, roundPx, paint);

paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.SrcIn));
canvas.DrawBitmap(bitmap, rect, rect, paint);
}
catch (Exception err)
{
System.Console.WriteLine("GetRoundedCornerBitmap Error - " + err.Message);
}

return output;
}

public static async void SetImage(Context context, ImageView iv, string u)
{
Uri url = new Uri(u);
if (!url.IsFile) new Exception();
var filename = System.IO.Path.GetFileName(url.LocalPath);
FileInfo fi = new FileInfo(System.IO.Path.Combine(baseDir, filename));
if (!fi.Exists || fi.LastWriteTime < DateTime.Now.AddDays(-7))
{
using (var bmp = await DownloadImageAsync(u, filename))
{
iv.SetImageBitmap(GetRoundedCornerBitmap(bmp, 60));
}
}
else
{
using (var bmp = BitmapFactory.DecodeFile(System.IO.Path.Combine(ba seDir, filename)))
{
iv.SetImageBitmap(GetRoundedCornerBitmap(bmp, 60));
}
}
}
private static Task<Bitmap> DownloadImageAsync(string url, string uid)
{
return Task.Run<Bitmap>(() => DownloadImage(url, uid));
}
private static Bitmap DownloadImage(string url, string uid)
{
Bitmap imageBitmap = null;
try
{
byte[] imageBytes;
using (var mstream = new MemoryStream())
{
using (var imageUrl = new Java.Net.URL(url))
{
var options = new BitmapFactory.Options
{
InSampleSize = 1,
InPurgeable = true
};

var bit = BitmapFactory.DecodeStream(imageUrl.OpenStream(), null, options);
bit.Compress(Bitmap.CompressFormat.Jpeg, 70, mstream);
}
imageBytes = mstream.ToArray();
System.IO.File.WriteAllBytes(System.IO.Path.Combin e(baseDir, uid), imageBytes);
if (imageBytes != null && imageBytes.Length > 0)
{
var options = new BitmapFactory.Options
{
InJustDecodeBounds = true,
};
// BitmapFactory.DecodeResource() will return a non-null value; dispose of it.
using (var dispose = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length))
{
}
var imageHeight = options.OutHeight;
var imageWidth = options.OutWidth;
var imageType = options.OutMimeType;
var height = (float)options.OutHeight;
var width = (float)options.OutWidth;
var inSampleSize = 1D;

if (height > 100 || width > 100)
{
inSampleSize = width > height
? height / 100
: width / 100;
}
options.InSampleSize =(int)inSampleSize;
options.InJustDecodeBounds = false;
return BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length, options);
}
}
}
catch (Exception ex)
{

Log.WriteLine(LogPriority.Error, "خطا", ex.Message);
}
return imageBitmap;
}
}

طرز استفاده
var i = FindViewById<ImageView>(Resource.Id.imageViewpers);
i.SetImageResource(Resource.Drawable.ic_timer);
ImageHelper.SetImage(this, i,"link" );