让PictureBox支持URL显示图片
[ToolboxItem(true)]
public class PictureBoxURL : PictureBox
{
private string _url = "";
public string ImageUrl
{
get
{
return _url;
}
set
{
_url = value;
if (String.IsNullOrEmpty(_url)) return;
GetImageByWebRequest(this, _url);
}
} public Image ImageLoading { get; set; } /// <summary>
/// 推荐使用ByWebRequest
/// </summary>
/// <param name="edit"></param>
/// <param name="url"></param>
private void GetImageByWebClient(PictureBoxURL edit, string url)
{
WebClientImage tt = new WebClientImage(edit, url);
Thread thread = new Thread(new ThreadStart(tt.Do));
thread.Start(); }
private void GetImageByWebRequest(PictureBoxURL edit, string url)
{
WebRequestImage tt = new WebRequestImage(edit, url);
Thread thread = new Thread(new ThreadStart(tt.Do));
thread.Start();
} public class WebClientImage
{
private PictureBoxURL edit;
private string url; public WebClientImage(PictureBoxURL a, string b)
{
edit = a;
url = b;
} public void Do()
{
try
{
edit.BeginInvoke(new Action(() =>
{
edit.Image = edit.ImageLoading;
})); using (var client = new System.Net.WebClient())
{
using (var strream = client.OpenRead(url))
{ Image Image = new Bitmap(strream);
edit.BeginInvoke(new Action(() =>
{
edit.Image = Image;
}));
}
}
}
catch
{
edit.BeginInvoke(new Action(() =>
{
edit.Image = null;
}));
}
}
}
private class WebRequestImage
{
private PictureBoxURL edit;
private string url; public WebRequestImage(PictureBoxURL a, string b)
{
edit = a;
url = b;
}
public void Do()
{
try
{
if (edit.IsHandleCreated)
{
edit.BeginInvoke(new Action(() =>
{
edit.Image = edit.ImageLoading;
}));
}
else
edit.Image = edit.ImageLoading; var request = (HttpWebRequest)WebRequest.Create(url); using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
using (var stream = response.GetResponseStream())
{
Image Image = new Bitmap(stream);// Bitmap.FromStream(stream);
edit.BeginInvoke(new Action(() =>
{
edit.Image = Image;
})); }
}
}
}
catch (Exception ex)
{
try
{
edit.BeginInvoke(new Action(() =>
{
edit.Image = null;
}));
}
catch { }
}
}
}
}
让PictureBox支持URL显示图片的更多相关文章
- IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)
编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...
- winform下picturebox控件显示图片问题
viewData_pictureBox.SizeMode=PictureBoxSizeMode.StretchImage;图片会自动按照比例缩放来完全显示在你的PictureBox中.
- 一行实现QQ群组头像,微信群组,圆角等效果. 并支持url直接加载图片
说点题外话. Coding中我们总是经历着这么几个过程. 学会使用: 不管是API也好, 开源库也好. 总是在最开始的学会去用. 了解实现原理: 可能会因为一些不兼容, 代码的异常状态的处理不够完美等 ...
- EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题
在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加 实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...
- Web前端学习(4):显示图片、url与文件路径
本章主旨 介绍<img>标签及其基本属性:介绍URL和文件路径 在上一章中,我简单地介绍了HTML的一些基本标签及基本属性,例如,我们用<p>标签来标记文本段落,用<h1 ...
- 重写TreeView,多层级节点下批量显示图片,图片支持缩略图和文件名列表切换,支持调用者动态匹配选中,支持外界拖入图片并添加到对应节点下
1.先看下整体效果 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.ImageTreeControl" xmlns=" ...
- 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片
InfoPath 的浏览器表单不支持加载并显示图片,当然在模板中可以插入图片,但是如果想显示数据库的一幅图片,或是动态加载一张图片就无能为力了. 基实这个问题可以通过在浏览器表单中使用: " ...
- 我写的一个 Qt 显示图片的控件
Qt 中没有专门显示图片的控件.通常我们会使用QLabel来显示图片.可是QLabel 显示图片的能力还是有点弱.比方不支持图像的缩放一类的功能.使用起来不是非常方便. 因此我就自己写了个简单的类. ...
- ie8浏览器 图片本身问题导致 无法显示图片--- 诡异现象的排查分享
引子: 前段时间 做新版2.0 首页 的时候, 总感觉 新版首页 线上 精彩回顾下的 2张图片颜色怪怪的,当时以为是图片压缩太厉害导致的,由于实在太忙就没太在意!以下 是来自线上 截图: 红色方 ...
随机推荐
- shell 除法 小数点
比如: num1=2 num2=3 num3=`echo "scale=2; $num1/$num2" | bc` 使用bc工具,sclae控制小数点后保留几位 还有一种方法 aw ...
- zstack 离线升级1.1到 1.2 rc
说明 zstack版本1.1是通过离线安装的. 升级过程 1 挂载下一个版本的zstack的社区版本centos镜像 ZStack-Community-x86_64-DVD-1.2.0.iso mkd ...
- 基于DevExpress ImageSlider实现图片轮播效果
工具:DevExpress版本为15.2.7 1.控件类型全称:DevExpress.XtraEditors.Controls.ImageSlider 2.控件所在程序集:DevExpress.Xtr ...
- 笔记——shell脚本学习指南
<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...
- JS/JQ获取各种屏幕的高度和宽度
Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...
- Android 自定义 view(四)—— onMeasure 方法理解
前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...
- chartControl绑定数据源
private void BindChartControl(DataTable dataTable,ChartControl chartControl,int[] columnNO,ViewType ...
- php开发客服系统(持久连接+轮询+反向ajax 转载 http://www.tuicool.com/articles/2mU7v2R)
php开发客服系统( 下载源码 ) 用户端(可直接给客户发送消息) 客服端(点击用户名.即可给该用户回复消息) 讲两种实现方式: 一:iframe + 服务器推技术comet(反向ajax,即服务器向 ...
- c#-快速排序-算法
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 步骤为: 1.从数列中挑出一个元素,称为 "基准"(p ...
- [原] VS新添加WebApplication项目,无法运行,请求帮助,问题如何解决
最近在WIN10 Pro上安装运行VS2012(安装顺利),新建WebApplication项目,无法运行,编译都无法通过,但都是警告. 症状: 1.新建项目无法编译: 2.新建后,默认引用全部感叹号 ...