Image扩展,如何将网络图片显示在自己的程序中

因为图片来源多种多样,默认框架已经提供了好几种图片读取方式,比如Image.FromFile,Image.FromHbitmap,Image.FromStream,但就是没有提供Image.FromNet,所以这里写了个通用的扩展方法,可以支持从Net环境中读取图片(Http、Ftp等),因为只是个扩展,也没啥好说的,直接上代码就是

    using System.Drawing;
    using System.Net;
    public static class ImageExtensions
    {
        /// <summary>
        /// 通过NET获取网络图片
        /// </summary>
        /// <param name="url">要访问的图片所在网址</param>
        /// <param name="requestAction">对于WebRequest需要进行的一些处理,比如代理、密码之类</param>
        /// <param name="responseFunc">如何从WebResponse中获取到图片</param>
        /// <returns></returns>
        public static Image GetImageFromNet(this string url, Action<WebRequest> requestAction = null, Func<WebResponse, Image> responseFunc = null)
        {
            return new Uri(url).GetImageFromNet(requestAction, responseFunc);
        }
        /// <summary>
        /// 通过NET获取网络图片
        /// </summary>
        /// <param name="url">要访问的图片所在网址</param>
        /// <param name="requestAction">对于WebRequest需要进行的一些处理,比如代理、密码之类</param>
        /// <param name="responseFunc">如何从WebResponse中获取到图片</param>
        /// <returns></returns>
        public static Image GetImageFromNet(this Uri url, Action<WebRequest> requestAction = null, Func<WebResponse, Image> responseFunc = null)
        {
            Image img;
            try
            {
                WebRequest request = WebRequest.Create(url);
                if (requestAction != null)
                {
                    requestAction(request);
                }
                using (WebResponse response = request.GetResponse())
                {
                    if (responseFunc != null)
                    {
                        img = responseFunc(response);
                    }
                    else
                    {
                        img = Image.FromStream(response.GetResponseStream());
                    }
                }
            }
            catch
            {
                img = null;
            }
            return img;
        }
    }

调用方法就是

            var uri = "http://t1.mmonly.cc/uploads/allimg/tuku2/16343123c-11.jpg";
            //var uri = new Uri("http://t1.mmonly.cc/uploads/allimg/tuku2/16343123c-11.jpg");
            var img = uri.GetImageFromNet(
            //(request) =>
            //{//此处可以对request进行相关设定,因为此部分均为基类,所以也可以用于FtpWebRequest之类
            //    request.Timeout = 2000;
            //},
            //(response) =>
            //{//此处可以确定如何从response中获取图片,同时可以包括相关判断之类
            //    return Image.FromStream(response.GetResponseStream());
            //}
            );
时间: 2024-10-27 19:46:27

Image扩展,如何将网络图片显示在自己的程序中的相关文章

Delphi Form显示在第二个显示器中的方法

Delphi 中窗体Form显示在第二个显示器中的方法: 假定要显示在扩展的第二个显示器的Form的名称为frmFloat,则除了要设置该form的top.left.width.height为Screen.Monitors[1].Top, Screen.Monitors[1].Left, Screen.Monitors[1].Width, Screen.Monitors[1].Height 外,一定要加上FrmFloat.MakeFullyVisible(Screen.Monitors[1]);

[Android] 拍照、截图、保存并显示在ImageView控件中

最近在做Android的项目,其中部分涉及到图像处理的内容.这里先讲述如何调用Camera应用程序进行拍照,并截图和保存显示在ImageView控件中以及遇到的困难和解决方法. PS:作者购买了本<Android第一行代码 著:郭霖>,参照里面的内容完成(推荐该书,前面的布局及应用非常不错).网上这类资料非常多,作者仅仅分享给初学者同时在线记录些内容,希望对大家有所帮助. 首先,设置activity_main.xml为LinearLayout布局且 android:orientation=&q

自己主动化的在程序中显示SVN版本号

有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想了下,希望最后达到的效果有: 自己主动化,不须要每次编译版本号的时候有人为的步骤,比方编版本号的时候人为改动某个值或者点击某个脚本. 跨平台.对外公布的win32/iOS/Android版本号都能正确表现 全面性.不管用Windows上用vs开发/Mac OS上用XCode/Eclipse来进行开发

Android应用程序中的多个Activity的显示创建和调用

布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orien

如何优雅的研究 RGSS3 番外(二) 显示文字信息的窗口中的纤程

Ruby 中的 Fiber 通常称为纤程,是一种非抢占式的多线程模型. 纤程不能在外部被终止,只能等待其主动让出执行权. RGSS3 在事件解释器 Game_Interpreter 与显示文字信息的窗口 Window_Message 中都用到了纤程. 以 Window_Message 为例. #-------------------------------------------------------------------------- # ● 更新画面 #-----------------

教你在你的应用程序中扩展使用dynamic类型

教你在你的应用程序中扩展使用dynamic类型 相信大家在开发中经常会接触到mvc中的ViewBag,有心的同学会,发现这就是一个dynamic类型,查看源码一谈究竟,本文也是根据dynamic来扩展一些实际中的应用,方便开发过程中使用,来提高大家的工作效率等.这里我给大家介绍一个简单的,解析xml的扩展类. 先新建一个类,DynamicXmlNode 继承自DynamicObject,然后我们输入override,看一下,都有哪些方法可以重写的: 看到其中有2个方法,感觉很接近我们要用的,我这

在Win32程序中显示Dos调试窗口,可暂停(AllocConsole,WriteConsole,FreeConsole函数,GetStdHandle函数取得输入句柄)

在很多程序中,都可以看到程序运行中,会有一个Dos窗口,实时显示一些运行信息,这里就告诉大家是如何实现的,我们做个简单的,其实对控制台的操作还有很多,有兴趣的可以去查资料. 用到的API函数如下: //创建控制台 AllocConsole; //获取控制台窗口 GetStdHandle; //向控制台输出信息 WriteConsole; //释放控制台 FreeConsole; unit Unit1; interface uses Windows, Messages, SysUtils, Var

自动化的在程序中显示SVN版本

有时候会有这样的情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用对应的是那个代码版本. 为了解决这个问题,我们希望能在应用上显示出当前应用所对应的代码版本,即svn版本. 构想了下,希望最后达到的效果有: 自动化,不需要每次编译版本的时候有人为的步骤,比如编版本的时候人为修改某个值或者点击某个脚本. 跨平台,对外发布的win32/iOS/Android版本都能正确表现 全面性,无论用Windows上用vs开发/Mac OS上用XCode/Eclipse来进行开发,无论是D

在卸载或更改程序中不显示已安装程序的方法

打开注册表,然后搜索在卸载或更改程序中改程序显示的信息(比如要找百度云管家,可以搜索"百度在线网络技术").找到后将DisplyName改成DoNotDisplayName或者其它名字,这样在卸载或更改程序列表就找不到该程序了.要恢复显示也简单,只需把名字改回DisplayName即可.