.NET编程——利用C#显示图片(WinForm)

2023-05-16

目录

前言

程序设计


前言

在Visual Studio下用C#实现导入图片并显示图片,同时可以通过按键来切换图片。


程序设计

功能及使用流程

该程序可实现从文件夹中批量导入图片并显示。获取图片左侧显示图片列表,右侧显示列表中选中的图片,也可通过按键选择上一张以及下一张图片。

界面


控件选择

1.三个button分别负责打开图片文件夹、上一张和下一张;

2.一个ListBox负责显示图片列表;

3.一个PictureBox负责显示图片。

单击控件——打开图片文件夹

private void btnStart_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();  //ofd类
            ofd.Title = "获取图片";  //窗口名
            ofd.InitialDirectory = @"D:\"; //打开的路径
            ofd.Multiselect = true;  //是否允许多选
            ofd.Filter = "图片文件|*.jpg|所有文件|*.*"; //支持的文件格式
            ofd.ShowDialog();  //打开选择窗口
            string[] picturePath = ofd.FileNames;  //将选择的图片的路径存储到picturePath
            listPicture.Items.Clear();  //清空窗口
            for (int i = 0; i < picturePath.Length; i++)
            {
                listPicture.Items.Add(Path.GetFileName(picturePath[i]));  //显示图片名
                strListPicture.Add(picturePath[i]);  //储存图片路径
            }
            if (listPicture.Items.Count != 0)
            {
                Bitmap picture = new Bitmap(picturePath[0]);  //显示第一张图片
                pictureBox.Image = picture;
            }
        }

 双击控件——显示所选图片

private void listPicture_DoubleClick(object sender, EventArgs e)
        {
            Bitmap picture = new Bitmap(strListPicture[listPicture.SelectedIndex]);
            pictureBox.Image = picture;
        }

单击控件——上一张

private void btnUp_Click(object sender, EventArgs e)
        {
            try
            {
                int index = listPicture.SelectedIndex;  //获取当前选择选项索引
                index--;  //索引指向上一张图片
                if (index == -1)
                {
                    index = listPicture.Items.Count - 1;  //从尾开始
                }
                listPicture.SelectedIndex = index;  //改变索引后改变选项索引
                Bitmap picture = new Bitmap(strListPicture[index]);
                pictureBox.Image = picture;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            
        }

<同理可实现单击控件下一张> 

源码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace picture
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // 用来存放图片的全路径的泛型
        List<string> strListPicture = new List<string>();
        private void btnStart_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();  //ofd类
            ofd.Title = "获取图片";  //窗口名
            ofd.InitialDirectory = @"D:\"; //打开的路径
            ofd.Multiselect = true;  //是否允许多选
            ofd.Filter = "图片文件|*.jpg|所有文件|*.*"; //支持的文件格式
            ofd.ShowDialog();  //打开选择窗口
            string[] picturePath = ofd.FileNames;  //将选择的图片的路径存储到picturePath
            listPicture.Items.Clear();  //清空窗口
            for (int i = 0; i < picturePath.Length; i++)
            {
                listPicture.Items.Add(Path.GetFileName(picturePath[i]));  //显示图片名
                strListPicture.Add(picturePath[i]);  //储存图片路径
            }
            if (listPicture.Items.Count != 0)
            {
                Bitmap picture = new Bitmap(picturePath[0]);  //显示第一张图片
                pictureBox.Image = picture;
            }
        }
        /// <summary>
        /// 实现双击显示图片
        /// </summary>
        private void listPicture_DoubleClick(object sender, EventArgs e)
        {
            Bitmap picture = new Bitmap(strListPicture[listPicture.SelectedIndex]);
            pictureBox.Image = picture;
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            try
            {
                int index = listPicture.SelectedIndex;  //获取当前选择选项索引
                index--;  //索引指向上一张图片
                if (index == -1)
                {
                    index = listPicture.Items.Count - 1;  //从尾开始
                }
                listPicture.SelectedIndex = index;  //改变索引后改变选项索引
                Bitmap picture = new Bitmap(strListPicture[index]);
                pictureBox.Image = picture;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            
        }

        private void btnDown_Click(object sender, EventArgs e)
        {
            try
            {
                int index = listPicture.SelectedIndex;  //获取当前选项索引
                index++;  //索引指向下一张图片
                if (index == listPicture.Items.Count)
                {
                    index = 0;  //从头开始
                }
                listPicture.SelectedIndex = index;  //改变索引后改变选项索引
                Bitmap picture = new Bitmap(strListPicture[index]);
                pictureBox.Image = picture;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET编程——利用C#显示图片(WinForm) 的相关文章

  • 对 URL 进行编码 C#

    所以我有一个看起来像这样的 URL http www test com folder1 id 3 但基本上 当他们单击按钮时 我想在 URL 栏中显示与该 id 关联的值的名称 例如 id 3 是名为 Rollex 的手表 所以我想要读取
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 列出运行时从开放泛型类型创建的封闭类型

    当我列出当前 AppDomain 中的所有类型时 我会看到带有通用占位符的通用类型 但是 如果我使用类型实例化泛型类型 然后列出 appDomain 中的所有类型 则我看不到新创建的封闭类型 在下面的示例中 输出仅为 Foo 1 T 我正在
  • Autofac 无法解析构造函数的参数“System.String applicationClientId”

    我有以下类 接口结构 class ProviderSetting public delegate ProviderSetting Factory string applicationClientId string appKey public
  • C# 无法访问已释放的对象

    我正在制作一个服务器 客户端应用程序 我将服务器套接字设置为侦听 并设置 BeginAccept 方法 当我关闭服务器套接字 Socket Close 以关闭服务器时 BeginAccept 方法的异步回调方法抛出异常 我检查了异常 发现异
  • Response.Redirect() 将绝对 URL 作为相对 URL 处理

    我有一个 net C 页面 它重定向到绝对 url 例如 Response Redirect rtsp myvideoServer com myVideoAddress mp4 ticket 1234 dt 1234 但重定向后会导致 ht
  • C# 要么返回 false 要么什么也不做

    我想知道是否有办法不必重复相同的事情如果施工而是调用一个状态检查 成功后无法返回true 有人知道这个问题更好的标题吗 bool Enable if GetStatus ref status Trace WriteLine Error re
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod
  • idleTimeout 和 ShutdownTimeout 之间的区别

    我正在尝试放宽网站的会话过期策略 以便用户可以指定会话超时间隔 我需要弄清楚应该指定哪些网站相关设置 以免过多限制用户 例如 可能需要 1 天的间隔 我将使用门票来实现这一点 现在 我知道我可以在网站的 web config 文件中指定id
  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 如何禁用 Alt + F4 关闭表单?

    What is the best way to disable Alt F4 in a c win form to prevent the user from closing the form 我使用表单作为弹出对话框来显示进度条 但我不希
  • 获得新的 access_token 后,如何更新我的 cookie?

    使用刷新令牌获取新的访问令牌后 我想使用该访问令牌更新我的客户端 cookie 我的客户端能够使用 ajax 登录并调用我的 REST API 但是当第一次授权过期时 API 调用自然不再起作用 我有一个 NET Web 应用程序 它使用自
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • 删除匹配前的一个单词和一个单词

    匹配之前的一个单词可以是一组任何符号 例如 D E F 我有一个正则表达式 s w s XXX 输入示例 This is KKK M D D xXx PPP输出示例 This is KKK PPP 所以我需要删除 XXX 之前的 1 个单词
  • 为什么在 C# 中使用 String.Concat()?

    我想知道这个问题有一段时间了 为什么使用String Concat 而不是使用 操作员 我明白了String Format因为它是一个空洞使用 运算符并使您的代码看起来更好 例如 string one bob string two jim
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 生成逗号分隔值

    假设我有一个字符串集合 foo bar xyz 我想从列表中生成一个逗号分隔的值 如下所示 foo bar xyz 请注意末尾缺少 我知道有多种方法可以生成此内容 使用 for 循环和 string Format 或 StringBuild
  • SQL 查询将文本数据存储在 Varbinary(max) 中

    有没有办法让 varbinary 在 SQL Server 中接受文本数据 这是我的情况 我有相当大量的 XML 我计划以 压缩 格式存储它们 这意味着 Varbinary 但是 当我进行调试时 我希望能够翻转配置开关并以纯文本形式存储 以

随机推荐

  • J-link 报错解决方法

    目录 1 Jlink 驱动版本过高 导致识别到 Jlink 工具为盗版2 JLink 芯片锁死 1 Jlink 驱动版本过高 导致识别到 Jlink 工具为盗版 报错 xff1a The connected probe appears to
  • Gazebo物理仿真环境搭建——roscontrol

    Gazebo物理仿真环境搭建 ros control 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 Gazebo物理仿真环境搭建 ros control前言一 ros con
  • 野火挑战者V2开发板CubeMX+LWIP+FreeRTOS+TCP_Server+TCP_Client实现

    首先说一下开发环境 xff1a MDK5版本为5 26 2 0 xff0c CubeMX版本为6 6 1 xff0c FreeRTOS API选择的是 CMSIS v1 xff0c LWIP版本为2 1 2 单片机型号为STM32F429I
  • 2021-06-18

    AttributeError module torch functional has no attribute relu AttributeError module torch functional has no attribute rel
  • 机器学习入门2 分类算法(knn,朴素贝叶斯,决策树,随机森林)

    分类算法 目标值 xff1a 类别 1 sklearn转换器和预估器 2 KNN算法 3 模型选择与调优 4 朴素贝叶斯算法 5 决策树 6 随机森林 3 1 sklearn转换器和估计器 转换器 估计器 estimator 3 1 1 转
  • ROS环境搭建过程

    怕自己忘记怎么搭的虚拟环境于是写下此博客进行记录 文章目录 前言过程1 准备工作2 开始建立 总结 前言 学习PPPoE协议和DHCP协议时进行一些用例抓包需要用到ROS虚拟环境 xff0c 于是第一次摸索 xff0c 在朋友帮助下完成得还
  • 美图秀秀扣取签字,证件照换背景

    扣取签字 需求 xff1a 手机拍一个照片提取签字到 png 方法 xff1a 美图秀秀进行图片增强 gt 然后用python提取 原图 美图秀秀打开 gt 增强 前三个都要弄 xff0c 这样就是白色背景 xff0c 其余的根据情况调节
  • 进程及进程间的切换(操作系统)

    进程 1 认识进程 xff1a 对于操作系统来说 xff0c 一个任务就是一个进程 xff0c 本质上是正在执行的一个程序 我们可以通过查看 windows任务管理器 中的列表 xff0c 我们可以完全认为在内存中的每一个exe文件理解为进
  • 通过Gazebo建立简单室内环境模型并用launch文件打开

    本文叙述如何直接使用Gazebo创建简单室内环境模型 xff0c 并能够使用launch文件打开 一 利用Gazebo建立好环境模型 1 打开Gazabo的编辑界面 运行如下命令后按Ctrl 43 B xff0c 进入到编辑界面 gazeb
  • 使用ORB-SLAM2算法和Turtlebot3机器人在自己构建的室内场景中建图

    本文叙述了在gazebo仿真环境和rqt可视化工具的背景下 xff0c 使用ORB SLAM2算法和turtlebot3 burger机器人在自己构建的室内场景中建图过程 目前存在的问题是运行RGBD节点时无法显示图像 xff0c 报错 W
  • 关于运行rqt_image_view命令后不显示相机图像信息的问题的解决方法

    本文叙述了在gazebo中添加完kinect V1相机 xff0c 开启机器人和场景后 xff0c 运行rqt image view命令不显示相机图像信息 xff0c 并且查询不到相关相机话题的问题的解决方法 1 问题描述 在gazebo中
  • QGC校准部分

    QGC校准 xff1a 主要是点击校准开始时发送校准的指令 xff0c 校准的逻辑时飞控里实现 xff0c 根据飞控回传的校准数据显示校准的步骤 开始校准 SensorsComponentController cpp中调用 startLog
  • ROS入门教程(二)—— ROS的版本选择与安装

    上篇文章我们介绍了VMware与Ubuntu的安装 xff0c 本文将继上文介绍安装完Ubuntu18 04后一些基本设置 xff0c 并且介绍如何根据Ubuntu版本选择正确的ROS版本 目录 前期准备 1 切换镜像源 2 安装中文输入法
  • ROS入门教程(三)—— 用C++或Python实现Hello world

    上篇文章我们介绍了ROS的版本选择与安装 xff0c 本文将继上文介绍安装完ROS Melodic Morenia后 xff0c 如何用C 43 43 或Python编写我们的第一个程序 目录 前言 Hello world实现流程 Pyth
  • ROS-Melodic升级Gazebo11

    ROS Melodic Full xff08 完整版 xff09 内置了Gazebo9 xff0c 但在Gazebo9中搭建自己的机器人环境时插入门窗会导致Gazebo9卡死 xff0c 建议升级成Gazebo11可以缓解该情况 注 xff
  • ROS入门教程(五)—— RViz仿真

    上篇文章我们介绍了URDF文件的导出 xff0c 本文将继上文介绍安装完导出URDF文件后 xff0c 如何在机器人操作系统 ROS 中显示 xff0c 并且让它动起来 目录 前言 RViz机器人模型可视化 launch启动RViz配置文件
  • ROS入门教程(六)—— Gazebo仿真

    作者环境已更新为Gazebo11 xff0c 读者可参照作者转载文章升级Gazebo11 xff0c 上篇文章我们介绍了RViz仿真 xff0c 本文将在Gazebo仿真环境中显示我们的机器人 目录 前言 Gazebo机器人模型可视化 前言
  • noVNC 源码安装步骤

    noVNC 源码安装步骤 在12 04 的ubuntu 中安装openstack novnc一直就是一个拦路虎 xff0c 今天受到启发 xff0c 所以写篇文章记录一下 以便于查看 noVNC 源码安装步骤 感谢林敏提示 设置nova c
  • ROS入门教程(七)—— Gazebo与RViz联合仿真

    通过Gazebo仿真和RViz仿真的学习后 xff0c 本文将通过Gazebo与RViz联合仿真实现机器人在Gazebo仿真环境中运动 目录 前言 URDF文件改写 Gazebo与RViz联合仿真 前言 机器人操作系统 ROS 提供了Gaz
  • .NET编程——利用C#显示图片(WinForm)

    目录 前言 程序设计 前言 在Visual Studio下用C 实现导入图片并显示图片 xff0c 同时可以通过按键来切换图片 程序设计 功能及使用流程 该程序可实现从文件夹中批量导入图片并显示 获取图片左侧显示图片列表 xff0c 右侧显