c#get网页图片并显示在picturebox上

本文将演示如何使用C#编程语言通过HTTP请求获取指定网页的图片资源,并将其显示在PictureBox控件中。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Diagnostics;//Trace.WriteLine
using System.Net;
using System.IO;

namespace ddtest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Encoding encode = Encoding.GetEncoding("utf-8");//网页编码==Encoding.UTF8
            //GET /img/baidu_jgylogo3.gif HTTP/1.1
            //Accept: image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5
            //X-HttpWatch-RID: 46990-10314
            //Referer: http://www.baidu.com/
            //Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3
            //User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
            //Accept-Encoding: gzip, deflate
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(@"http://www.baidu.com/img/baidu_jgylogo3.gif"));
            req.Method = "GET";
            req.UserAgent = " Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
            //req.ContentType = "application/x-www-form-urlencoded";
            req.Accept = "image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5";
            req.Headers.Add("X-HttpWatch-RID", " 46990-10314");
            req.Headers.Add("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3");

            HttpWebResponse ress = (HttpWebResponse)req.GetResponse();
            Stream sstreamRes = ress.GetResponseStream();
            pictureBox1.Image = System.Drawing.Image.FromStream(sstreamRes);
        }
    }
}

<think>我们将使用C#的Windows Forms应用程序来展示如何将图片显示PictureBox控件中。 步骤: 1. 创建一个Windows Forms项目。 2. 在窗体上添加一个PictureBox控件。 3. 通过代码或属性窗口设置PictureBox的Image属性。 有两种常见方式: a. 在设计时通过属性窗口设置图片(静态)。 b. 在运行时通过代码加载图片(动态)。 这里我们主要演示动态加载图片。 注意:图片路径可以是绝对路径或相对路径。相对路径是相对于应用程序的当前工作目录(通常是bin\Debug或bin\Release)。 示例代码: - 使用Image.FromFile方法从文件加载。 - 或者使用其他方式(如资源文件、网络流等)。 我们将展示从文件加载图片。 另外,需要注意: - 异常处理:文件可能不存在。 - 释放资源:Image对象在使用后需要正确释放(但PictureBox在设置Image属性后会管理该图像,当PictureBox被销毁或图片被替换时,原图像会被释放。不过,如果频繁更换图片,应该手动释放之前的图像以避免内存泄漏)。 下面是一个示例,在窗体加载时加载图片,或者通过按钮点击加载图片。 我们以按钮点击事件为例。 创建步骤: 1. 创建一个Windows Forms项目。 2. 在窗体上放置一个PictureBox控件(name: pictureBox1)和一个Button控件(name: btnLoad)。 3. 双击按钮生成点击事件处理函数,在函数中编写加载图片的代码。 代码示例:</think>### 在 C# 中将图片显示PictureBox 控件 以下是完整的解决方案,包含两种常用方法(从文件加载和从资源加载): ```csharp using System; using System.Drawing; using System.IO; using System.Windows.Forms; namespace ImageDisplayExample { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } // 方法1:从文件路径加载图片 private void btnLoadFromFile_Click(object sender, EventArgs e) { using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp;*.gif"; if (openFileDialog.ShowDialog() == DialogResult.OK) { try { // 使用Image.FromFile加载图片 pictureBox1.Image?.Dispose(); // 释放之前的图像资源 pictureBox1.Image = Image.FromFile(openFileDialog.FileName); // 设置PictureBox显示模式 pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; } catch (Exception ex) { MessageBox.Show($"加载图片失败: {ex.Message}"); } } } } // 方法2:从嵌入式资源加载图片 private void btnLoadFromResource_Click(object sender, EventArgs e) { try { // 获取当前程序集 var assembly = System.Reflection.Assembly.GetExecutingAssembly(); // 资源路径格式:命名空间.文件夹.文件名 using (Stream stream = assembly.GetManifestResourceStream("ImageDisplayExample.Resources.sample_image.jpg")) { if (stream != null) { pictureBox1.Image?.Dispose(); // 释放之前的图像资源 pictureBox1.Image = Image.FromStream(stream); pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; } else { MessageBox.Show("未找到嵌入式资源"); } } } catch (Exception ex) { MessageBox.Show($"加载资源失败: {ex.Message}"); } } } } ``` #### 关键代码解释: 1. **文件加载流程**: - 使用 `OpenFileDialog` 让用户选择图片文件 - `Image.FromFile()` 方法加载图片文件 - `PictureBoxSizeMode.Zoom` 保持图片比例自适应控件 2. **资源加载流程**: - 将图片添加到项目的 Resources 文件夹 - 设置图片属性为 "嵌入式资源" - 使用 `Assembly.GetManifestResourceStream()` 获取资源流 - `Image.FromStream()` 将流转换为图像 3. **内存管理**: - `pictureBox1.Image?.Dispose()` 释放之前的图像资源 - `using` 语句确保文件流和对话框正确释放 #### 使用前准备: 1. 创建 Windows Forms 项目 2. 在窗体上添加: - PictureBox 控件(命名为 `pictureBox1`) - 两个按钮(`btnLoadFromFile` 和 `btnLoadFromResource`) 3. 添加资源图片: - 在解决方案资源管理器中创建 Resources 文件夹 - 添加图片文件 - 右键图片 → 属性 → 生成操作:嵌入式资源 #### 常见问题解决方案: 1. **图片显示**: - 检查文件路径是否正确 - 验证资源路径格式(使用 `GetManifestResourceNames()` 列出所有资源) - 确保图片格式受支持(jpg/png/bmp等) 2. **内存泄漏**: - 每次设置新图片前调用 `Dispose()` 释放旧资源 - 在窗体关闭时添加:`pictureBox1.Image?.Dispose()` 3. **性能优化**: ```csharp // 使用双缓冲减少闪烁 pictureBox1.DoubleBuffered = true; // 大图片处理 Bitmap resized = new Bitmap(originalImage, new Size(pictureBox1.Width, pictureBox1.Height)); ``` 4. **支持拖放功能**: ```csharp // 启用拖放 pictureBox1.AllowDrop = true; private void pictureBox1_DragDrop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (files.Length > 0) pictureBox1.Image = Image.FromFile(files[0]); } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值