3-7 写二进制文件案例学习

简介:

3-4-2   写二进制文件案例学习

u 本案例您将学习到:
n 图片文件二进制流的读取并显示在图像控件之中;
n 如何将图像控件图像读取到内存流,并另外存储;
n saveFileDialog 控件在另存文件中的作用。

1.  案例学习:写二进制文件案例——图片的存储与复制

u 实验步骤(1):
由图 3-10 所示,从工具箱之中拖拽 MainMenu 控件、 SaveFileDialog 控件、 GroupBox 控件、 PictureBox 控件各一个到 Form 窗体上; Form 窗体的 text 属性设置为“图片处理器”; GroupBox 控件的 text 属性设置为“图片显示区”; PictureBox 控件的 sizemode 属性设置为 zoom MainMenu 控件添加菜单项及子项如表 3 15 所示:
3-15  图片处理器菜单控件的菜单项及子项设置
菜单项
子项
其他属性
图片(&P
打开图片(&O
快捷键等其他属性根据自己设计定(下同)
复制图片(&C
 
关闭(&Q
 
 
3-10   图片处理器界面图
u 实验步骤(2):
用鼠标双击主界面上菜单控件的所有菜单项,进入 .cs 文件编辑状态准备进行开发。代码加下:
///======================================代码编辑===========================================
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.IO;
 
namespace  FileOptionApplication
{
    public partial class Form12 : Form
    {
        public Form12()
        {
            InitializeComponent();
        }
        /// <summary>
        /*******************************************************
        **方 法  名:GetFileBytes
        **输 入参数:Filename:文件名称;
        **输 出参数:比特流类型
        **返 回  值:byte[]二进制流
        **创 建  人:钱哨
        **创 建日期: 09-7-9
        **描     述:将读取的文件转化成为二进制流。
        *******************************************************/
        /// <summary>
        /// </summary>
        /// <param name="Filename">打开的图片具体路径及文件名称</param>
        /// <returns>比特流类型</returns>
        public byte[] GetFileBytes(string Filename)
        {
            if (Filename == "")
                return null;
            try
            {
                FileStream fileStream = new FileStream(Filename, FileMode.Open, FileAccess.Read);
                BinaryReader binaryReader = new BinaryReader(fileStream);
                byte[] fileBytes = binaryReader.ReadBytes((int)fileStream.Length);
                binaryReader.Close();
                fileStream.Close();
                return fileBytes;
            }
            catch
            {
                return null;
            }
        }
        /*******************************************************
        **方 法  名:WriteFileBytes
        **输 入参数:TargetFilename:目标文件名称;
        **输 出参数:布尔类型:是否写成功
        **返 回  值:byte[]二进制流
        **创 建  人:钱哨
        **创 建日期: 09-7-9
        **描     述:将读取的文件转化成为二进制流。       
        *******************************************************/
        /// </summary>
        /// <param name="TargetFilename">目标文件</param>
        /// <param name="fileBytes">文件比特流</param>
        /// <returns>布尔类型:是否写成功</returns>
        public bool WriteFileBytes(string TargetFilename, byte[] fileBytes)
        {
            bool k = true;
            if (TargetFilename != "" && fileBytes.Length != 0)
            {
                try
                {
   FileStream fileStream = new FileStream(TargetFilename, FileMode.OpenOrCreate, FileAccess.Write);
                    BinaryWriter binaryWriter = new BinaryWriter(fileStream);
                    binaryWriter.Write(fileBytes);
                    binaryWriter.Flush();
                    binaryWriter.Close();
                    fileStream.Close();
                }
                catch
                {
                    k = false;
                }
            }
            else
            {
                k = false;
            }
            return k;
        }
        /// <summary>
        /// 菜单:打开图片
        /// </summary>
        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openfile = new OpenFileDialog();
                openfile.Filter = "jpg类型图片(*.jpg)|*.jpg|BMP类型图片(*.bmp)|*.bmp";
                if (openfile.ShowDialog() == DialogResult.OK)
                {
                    byte[] picbinary = GetFileBytes(openfile.FileName);
                    //第一步:打开图片文件,获得比特流
                    MemoryStream mempicstream = new MemoryStream(picbinary);
                   //第二步:将比特流还存在内存工作流中。
                    pictureBox1.Image = Image.FromStream(mempicstream);
                   //第三步:加载内存流到图片控件
                    mempicstream.Dispose();
                    mempicstream.Close();
                }
            }
            catch (Exception m)
            {
                MessageBox.Show("读取图片出错,可能的问题是:"+Convert.ToString(m) ,"错误提示");
            }
        }
        /// <summary>
        /// 将打开的图片进行复制
        /// </summary>
        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            try
            {
                if (pictureBox1.Image == null)
                {
                    MessageBox.Show("禁止图片为空时候另存信息。""错误提示");
                }
                else
                {
                    saveFileDialog1.Filter = "jpg类型图片(*.jpg)|*.jpg";
                    DialogResult result = saveFileDialog1.ShowDialog();
                    if (result == DialogResult.OK)
                    {
                        MemoryStream ms=new MemoryStream();
                        Bitmap bm = new Bitmap(pictureBox1.Image);
                        bm.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                        byte[] bytes = ms.ToArray();
                        WriteFileBytes(saveFileDialog1.FileName, bytes);
                        MessageBox.Show("另存图片成功""提示");
                        ms.Dispose();
                        ms.Close();
                        bm.Dispose();
                    }
                }
            }
            catch (Exception m)
            {
               MessageBox.Show("读取图片出错,可能的问题是:" + Convert.ToString(m),"错误提示");
            }
        }
    }
}
u 实验步骤(3):
调试、运行程序,得到效果如图 3 11 所示:
3-11   图片处理器效果图




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/210975,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
人工智能 API iOS开发
ChatGPT编程Python小案例(拿来就用)—解压zip压缩文
ChatGPT编程Python小案例(拿来就用)—解压zip压缩文
36 0
|
3月前
|
Java 数据安全/隐私保护 Python
Python案例分享:如何实现文件的解压缩
Python案例分享:如何实现文件的解压缩
72 8
|
3月前
|
存储 缓存 安全
Python案例分享:如何实现文件的上传下载
Python案例分享:如何实现文件的上传下载
333 6
|
7月前
|
存储 编解码 Go
编程之美:自定义二进制文件实用指南
编程之美:自定义二进制文件实用指南
210 0
|
机器学习/深度学习 算法 数据挖掘
巨详细的一份Python学习路径文档--如何精准的入手Python
巨详细的一份Python学习路径文档--如何精准的入手Python
212 0
【Python从入门到实践4.0】文件夹、文件相关操作
【Python从入门到实践4.0】文件夹、文件相关操作
如何用VS2017生成可执行文件
如何用VS2017生成可执行文件
如何用VS2017生成可执行文件
文本文件和二进制文件的区别,使用方法和检验方式
文本文件和二进制文件的区别,使用方法和检验方式
139 0
如何用NotePad++查看二进制文件
如何用NotePad++查看二进制文件
1800 0
如何用NotePad++查看二进制文件
|
IDE 程序员 开发工具
如何看懂源代码--(分析源代码方法)
建立架构观点的认识是最重要的事情。虽然这一系列的文章前提为“阅读他人的程式码”,但我们真正想做的工作,并不在于彻底地详读每一行程式码的细节,而是想要透过重点式的程式码“摘读” ,达到对系统所需程度的了解。每个人在阅读程式码的动机不尽相同,需要了解的程度也就有深浅的分别。只有极为少数的情况下,你才会需要细读每一行程式码。
702 0
下一篇
DataWorks