之前那些操作完成对图片的修改之后,就是要保存图片了。

这里保存用到一个SaveFileDialog控件,可以获取用户选择的保存文件的路径。

 if (pictureBox1.Image.Width > )
{
SaveFileDialog saveImageDialog = new SaveFileDialog();//这里实例化一个SaveFileDialog控件,并设置一些属性
saveImageDialog.Title = "图片保存";
saveImageDialog.Filter = @"jpeg|*.jpg|bmp|*.bmp";
saveImageDialog.FileName = getgv();//获取DataGridView控件的内容作文文件名
if (saveImageDialog.ShowDialog() == DialogResult.OK)//弹出对话框
{
string fileName = saveImageDialog.FileName.ToString();//获取文件路径
if (fileName != "" && fileName != null)
{
string fileExtName = fileName.Substring(fileName.LastIndexOf(".") + ).ToString();//截取文件的后缀名
System.Drawing.Imaging.ImageFormat imgformat = null;
if (fileExtName != "")
{
switch (fileExtName)
{
case "jpg":
imgformat = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
case "bmp":
imgformat = System.Drawing.Imaging.ImageFormat.Bmp;
break;
default:
imgformat = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
}
try
{
//Bitmap bit = new Bitmap(pictureBox1.Width, pictureBox1.Height);
//保存之前判断文件夹里的图片数量,如果大于256张就要删除第一张
string dpath = fileName.Substring(, fileName.LastIndexOf("\\"));//去除掉文件名
DirectoryInfo dti = new DirectoryInfo(dpath);//根据路径获取目录对象
FileInfo[] file = dti.GetFiles();//获取当前目录的文件列表
if (file.Count() >= )
{
int a = (file.Count()-);
for (int i = ; i <= a; i++)
{
file[i].Delete();
}
}
pictureBox1.Image.Save(fileName, imgformat);//保存文件
MessageBox.Show("保存成功", "提示");
//pictureBox1.Image.Save(saveImageDialog.FileName);
fName = fileName;
}
catch (Exception ex)
{
MessageBox.Show("保存异常 " + ex.Message, "提示");
}
}
}
}
xulielv(fName);//在listview中显示图片 }
}
catch
{ }
 getgv

/// <summary>
/// 获取dataGridView注释作为图片名
/// </summary>
/// <returns></returns>
private string getgv()
{
string txt = "";
try
{
txt += DateTime.Now.ToString("yyyy年MM月dd日HH.mm.ss");
for (int i = ; i < ; i++)
{
txt += ",";
txt += dataGridView1.Rows[].Cells[i].Value.ToString();
}
}
catch(Exception ex)
{
MessageBox.Show("注释内容不符合命名规则 "+ex.Message);
}
return txt;
}

获取dataGridView注释作为图片名

/// <summary>
/// 生成序列中的图片
/// </summary>
private void xulielv(string path)
{
try
{
if (path != "")
{
imageList1.Images.Clear();
string dpath = path.Substring(, path.LastIndexOf("\\"));//去除掉文件名
DirectoryInfo TheFolder = new DirectoryInfo(dpath);//文件路径
List<string> tifNames = new List<string>();
for (int i = ; i < TheFolder.GetFiles().Length; i++)//遍历文件夹
{
if (TheFolder.GetFiles()[i].Length > && TheFolder.GetFiles()[i].Extension == ".jpg" || TheFolder.GetFiles()[i].Extension == ".png")//或者jpg,png 文件大小要大于0且是图片文件
{
Image image = Image.FromFile(TheFolder.GetFiles()[i].DirectoryName + "\\" + TheFolder.GetFiles()[i].Name); //获取文件
tifNames.Add(TheFolder.GetFiles()[i].Name);//添加文件名
imageList1.Images.Add(image);//添加图片
//image.Dispose();
} }
//初始化设置
this.listView1.Items.Clear();
//this.listView1.View = View.LargeIcon;
this.listView1.View = View.Tile;
this.listView1.LargeImageList = this.imageList1;
//开始绑定
this.listView1.BeginUpdate();
for (int i = ; i < tifNames.Count; i++)
{
ListViewItem lvi = new ListViewItem();
lvi.ImageIndex = i;
lvi.Text = tifNames[i];
this.listView1.Items.Add(lvi);
}
this.listView1.EndUpdate();
}
else
{
MessageBox.Show("未提供有效路径");
}
}
catch(Exception ex)
{
MessageBox.Show("生成序列失败 "+ex.Message);
} }

xulielv

这个获取图片放入到listview方法,如果图片过大有很多的话,容易造成内存不足而报错的问题。

撤回

 if (bitlist.Count == )//判断供撤回的集合中是否有数据
{
return;
}
for (int i = ; i < bitlist.Count; i++)
{
if (i == bitlist.Count-)
{
if (i == )//如果已经是最后一张,清空picturebox内的图片
{
this.pictureBox1.Image = null;
this.pictureBox1.Refresh();
txt_tjsz.Visible = false;
txt_tjsz.Text = "";
txt_tjwz.Visible = false;
txt_tjwz.Text = "";
return;
}
pic = bitlist[i - ];//绘制图片时的图片对象
this.pictureBox1.Image = pic;//控件显示的图片
this.pictureBox1.Refresh();
bitlist.Remove(bitlist[i]);//从集合中除去撤回的图片
}
}

这里要注意,放入集合中的图片一定要是修改完成以后获取的图片对象,不能是一直在被修改的图片,否则在集合中的图片也是被修改的。

winfrom保存图片,将文件夹中图片放入listview,与撤回操作的更多相关文章

  1. Python--将文件夹中图片按照横屏竖屏进行分类

    搬运链接:https://www.jianshu.com/p/c8be54282e77 """ 可以遍历输入的路径的指定后缀的文件,主要是用来筛选图片,将图片分成 横屏, ...

  2. 有些其他程序设置为从 Outlook 下载并删除邮件。为防止发生此意外情况,我们将这些邮件放入一个特殊的 POP 文件夹中

    最近使用FOXMAIL接收MSN邮件时,发现有一些邮件收取不到,进到WEB页面,页面下方提示“你的邮件位于 POP 文件夹中!有些其他程序设置为从 Outlook 下载并删除邮件.为防止发生此意外情况 ...

  3. 从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法

    原文:从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法 主程序 为 Main_Test.exe 被加载的DLL 为 Load_Test.dll  此DLL 中 有一个 文件夹Re ...

  4. webpack 打包出多个HTML文件,多个js文件,图片文件放置到指定文件夹中

    一.webpack.config.js简单代码 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { ...

  5. 【C#操作Excel】同名Excel放入同一文件夹中,然后合并为同一个Excel文件

    近期有对Excel操作的需求,由于都是重复劳动,故分享代码如下,本人也是技术菜鸟没有考虑性能,如果有大牛能够指教就再好不过了 事先电脑中需要安装Excel,然后Vs中引用Microsoft.Offic ...

  6. 使用c#将多个文件放入文件夹中,并压缩下载

    ZipClass.cs  这个是一个压缩文件的类,可直接复制使用,使用到的命名空间是 using System.IO;using ICSharpCode.SharpZipLib;using ICSha ...

  7. python 将指定文件夹中的指定文件放入指定文件夹中

    import os import shutil import re #获取指定文件中文件名 def get_filename(filetype): name =[] final_name_list = ...

  8. C++获取文件夹中所有文件

    获取文件夹中的文件,用到过很多次,每次用的时候都要去查下,很烦,所以想自己写下,当然,借鉴了很多其他大佬的博客 主要实现的函数,如下: void getFiles( string path, vect ...

  9. 用Python批量裁取图,来获取文件夹中所有图片名

    批量截图(截取正方形图,哪个边短就用哪个边作为标准来截取) 功能是裁取图片中红色框的部分. 代码为: import sys from tkinter.tix import Tk from PIL im ...

随机推荐

  1. ECMALL转空间后出现空白问题解析

    今天客户网站做完的ECMall测试站,将数据库和代码分别传到了正式空间中.通过浏览器浏览,整个页面一片空白. 第一个反应是数据库配置有问题.打开网站根目录下data/config.ini.php,内容 ...

  2. POJ2564:Edit Step Ladders

    浅谈\(Trie\):https://www.cnblogs.com/AKMer/p/10444829.html 题目传送门:http://poj.org/problem?id=2564 记\(f[i ...

  3. 『备忘录』elasticsearch 去重分页查询

    一开始数据结构设计的很复杂,又是父子关系又是嵌套关系,结果发现不能通过简单的查询得到想要的结果:比如一个商店只出现一件符合条件的商品,弄得查询语句就变成这样了 curl -XPOST http://l ...

  4. C++直接初始化和复制初始化1

    这篇文章主要介绍了C++直接初始化与复制初始化的区别深入解析,是很多C++初学者需要深入了解的重要概念,需要的朋友可以参考下   C++中直接初始化与复制初始化是很多初学者容易混淆的概念,本文就以实例 ...

  5. FPGA时序约束一点总结

    时序约束的一点总结. 打拍.掌握好时序. 手动分配位置,这个不是一定有效. 打破层级或者物理综合,或者自动加流水等综合优化参数调整. 根据实际情况使用异步时钟策略. 换速度更快的片子. 最也进接手一个 ...

  6. 用活Firewalld防火墙之direct

    原文地址:http://www.excelib.com/article/294/show 学生在前面已经给大家介绍过了Firewalld中direct的作用,使用他可以直接使用iptables.ip6 ...

  7. Jquery 监听浏览器前进后退

    jQuery(document).ready(function () { if (window.history && window.history.pushState) { $(win ...

  8. app的apk 安装的方法--adb--命令安装 (含把apk放某个文件夹,每次启动自己安装)

    adb安装 1.在app自动化之前,首先手机上有要被测试的app,如何把电脑本地上的app安装到手机上呢?可以在运行自动化代码前,在cmd输入adb指令,把电脑app安装到手机上 adb instal ...

  9. java代码---------陈勇老师的

    总结:看看写的多漂亮啊 package com.test4; import java.awt.*; import java.awt.event.*; import javax.swing.*; pub ...

  10. Win10怎么以管理员身份运行CMD命令提示符

    [方法一] 我们可以在Windows10系统的开始菜单上,单击鼠标右键,这时候出现的菜单中,我们选择命令提示符(管理员)点击打开这样即可. 2 这样打开以后,大家可以看到命令提示符界面中显示管理员:命 ...