当前位置: 首页 > article >正文

在 C# 中加载图像而不锁定文件

如何在不锁定图像文件的情况下将图像加载到 C# 程序中。单击“正常加载”按钮时,程序将使用以下代码显示图像文件。

// Load the image normally.
private void btnLoadNormally_Click(object sender, EventArgs e)
{
    if (picSample.Image != null) picSample.Image.Dispose();
    picSample.Image = new Bitmap("essential_algs_75.jpg");
}

此代码只是创建一个新的Bitmap,并将要加载的文件的名称传递给其构造函数。(Visual Studio 在构建程序时将文件复制到程序的可执行目录中,因此请在那里查找该文件。)如果您随后尝试使用文件资源管理器重命名或删除该文件,您将会失败,因为该文件已被锁定。基本上,程序会将文件保持锁定状态,以防以后需要使用它来绘制位图。

当您单击“加载解锁”按钮时,程序将使用以下代码来显示图像文件。

// Load the bitmap without locking it.
private void btnLoadUnlocked_Click(object sender, EventArgs e)
{
    if (picSample.Image != null) picSample.Image.Dispose();
    picSample.Image = LoadBitmapUnlocked("essential_algs_75.jpg");
}

完整代码如下:

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;

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

        // Load the image normally.
        private void btnLoadNormally_Click(object sender, EventArgs e)
        {
            if (picSample.Image != null) picSample.Image.Dispose();
            picSample.Image = new Bitmap("essential_algs_75.jpg");
        }

        // Load the bitmap without locking it.
        private void btnLoadUnlocked_Click(object sender, EventArgs e)
        {
            if (picSample.Image != null) picSample.Image.Dispose();
            picSample.Image = LoadBitmapUnlocked("essential_algs_75.jpg");
        }

        // Load a bitmap without locking it.
        private Bitmap LoadBitmapUnlocked(string file_name)
        {
            using (Bitmap bm = new Bitmap(file_name))
            {
                return new Bitmap(bm);
            }
        }

        // Open the book's web page.
        private void picSample_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.csharphelper.com/algorithms.html");
        }
    }
}


http://www.kler.cn/a/446236.html

相关文章:

  • lambda初探(一)
  • 题海拾贝:力扣 86.分隔链表
  • 网络安全概论——防火墙原理与设计
  • 【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯
  • jQuery动画(2)
  • jdk和cglib动态代理区别
  • Xcode 文件缺失:Missing submodule xxx
  • 基于Spring Boot的大学就业信息管理系统
  • MPLS小实验:静态建立LSP
  • 【Spring】Spring的模块架构与生态圈—Spring MVC与Spring WebFlux
  • thinkphp框架diygw-ui-php进销存出库记录操作
  • 基于Spring Boot的高校素拓分管理系统
  • ImageGlass:基于C#开发的轻量级、多功能的图像查看器
  • 仿途唬养车系统汽修服务小程序修车店小程序源码
  • 数据库 MYSQL的概念
  • 怎么样保持mysql和redis数据一致性
  • CLION中运行远程的GUI程序
  • Nuc9 Truenas 和 Macmini4组雷电网桥 上传速度异常 1Mbp/s 解决
  • datasets 笔记:加载数据集(基本操作)
  • 【Qt编程入门】
  • 了解过.css 的优化吗?
  • 【计算机网络】lab2 Ethernet(链路层Ethernet frame结构细节)
  • 小数转换为二进制
  • 科技赋能医疗挂号:SSM 医院预约挂号系统的 Vue 卓越设计与达成
  • 查看mysql的冷数据配置比例
  • 计算机网络面经总结