让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张图片颜色怪怪的,当时以为是图片压缩太厉害导致的,由于实在太忙就没太在意!以下 是来自线上 截图: 红色方 ...
随机推荐
- windows下面配置apache+http
一.apache安装 下载并安装apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi(见附件),找到apache安装目录(C:\Program Files (x86 ...
- npm总结
1.npm install -g 模块 全局安装 2.npm install 模块@version 安装具体摸个版本的模块 ...
- 1.初识Shell脚本语言
PS:在做Linux下STM8固件升级项目中,需要让CPU通过I2C总线给STM8传输数据,刚开始一个一个的敲,很浪费时间,用shell脚本大大提高了数据传输效率,它是用户与内核进行交互操作的一种接口 ...
- LeetCode: Ransom Note
public class Solution { public boolean canConstruct(String ransomNote, String magazine) { int[] rans ...
- WCF入门-项目间调用服务
练习WCF入库,添加了一个WCF项目,同时添加了一个控制台程序,在控制台程序启动时,调用WCF服务,报错. 控制台程序代码为: namespace WcfConsumer { class Progra ...
- (temp)catch ip
String str = "192.168.1.100"; String[] ipStr = str.split("\\."); ]; ; i < ; i ...
- python利用redis构成一个队列
例子在 http://peter-hoffmann.com/2012/python-simple-queue-redis-queue.html 英文 http://www.django-china.c ...
- Lucene热词统计
1.建立搜索表 ID KeyWords DT 搜索一次保存一次,id才用guid提高效率 /// <summary> /// 搜索数据 /// </summary> /// & ...
- VB 中 NumericUpDown 控件 如何为手动输入设定触发事件
Private Sub numDuration_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) ...
- Hibernate 基础配置及常用功能(三)
本章重点讲述Hibernate对象的三种状态以及如何配置二级缓存 有关Hibernate的三种状态如何相互转换网上都能查到,官方文档描述的也比较详细.这里主要是针对几个重点方法做代码演示. 一.状态转 ...