PictureForm.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;
using System.Drawing.Imaging;
using Packet;

namespace TSProducer
{
    public partial class PictureForm : Form
    {
        private string gPicFilePath;             //全局变量,图片文件路径

        public string strPNG = "";

        public string FromPngValue
        {
            get
            {
                return this.textBoxPicture.Text;
            }
            set
            {
                this.textBoxPicture.Text = value;
            }
        }

        public event EventHandler accept;

        public PictureForm()
        {
            InitializeComponent();
        }
        public PictureForm(string filePath)
        {
            InitializeComponent();
            gPicFilePath = filePath;
            showPic();
            showPicContent();
            setFormTitle();
        }

        public void showPic()
        {
            Image img = Image.FromFile(gPicFilePath);
            pictureBox1.Image = img;
        }

        public void showPicContent()
        {
            try
            {
                byte[] pngBytes = ImgToBytes(gPicFilePath);
                strPNG = Convert.ToBase64String(pngBytes);
                textBoxPicture.Text = strPNG;

                /*************************************以十六进制显示图片内容**********************************************/
                //FileStream fs = new FileStream(gPicFilePath, FileMode.Open, FileAccess.Read);
                //BinaryReader br = new BinaryReader(fs);

                //string str = "\r\t\r\t";
                //for (uint i = 0x0; i <= 0xf; i++)
                //{

                //    str += i.ToString("x") + "\r\t";
                //}
                //str += "\r\n";

                //UInt64 memRowIndex = 00000000; //用来标示行号
                //str += memRowIndex.ToString("X08") + "h:\r\t";

                //int count = 0;
                //int length = (int)fs.Length;

                //while (length > 0)
                //{
                //    count++;
                //    byte tempByte = br.ReadByte();
                //    string tempStr = tempByte.ToString("X02");

                //    str += tempStr.ToUpper() + "\r\t";
                //    length--;

                //    if (count == 16)
                //    {
                //        memRowIndex += 0xf;
                //        str += "\r\n" + memRowIndex.ToString("X08") + "h:\r\t";   //每行的行头标识
                //        count = 0;

                //    }
                //}
                //textBoxPicture.Text = str;
                //br.Close();
                //fs.Close();
                /***********************************************************************************/
            }
            catch (IOException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 设置文件标题
        /// </summary>
        protected void setFormTitle()
        {
            FileInfo fileinfo = new FileInfo(gPicFilePath);
            this.Text = fileinfo.Name + " - Picture";
        }
        
        protected static byte[] ImgToBytes(string gPicFilePath)
        {
            MemoryStream ms = null;
            try
            {
                ms = new MemoryStream();
                Bitmap bmap = new Bitmap(gPicFilePath);
                bmap.Save(ms, ImageFormat.Png);
                ms.Flush();
                byte[] pngBytes = ms.ToArray();
                return pngBytes;
            }
            catch (ArgumentNullException ex)
            {
                throw ex;
            }
            finally
            {
                ms.Close();
            }
        }

        public string getPngStr()
        {
            try
            {
                byte[] pngBytes = ImgToBytes(gPicFilePath);
                strPNG = Convert.ToBase64String(pngBytes);
                return strPNG;
            }
            catch (IOException ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 插入图片的信息到主窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnClickInsertPicBits(object sender, EventArgs e)
        {
            if (accept != null)
            {
                accept(this, EventArgs.Empty);
            }
        }

        private void OnClickOpenPic(object sender, EventArgs e)
        {
            if (openPicFileDlg.ShowDialog() == DialogResult.OK)
            {
                gPicFilePath = openPicFileDlg.FileName;
                showPic();
                showPicContent();
                setFormTitle();
            }
        }
        /// <summary>
        /// 测试读取保存在package中的图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnClickTest(object sender, EventArgs e)
        {
            if (openPicFileDlg.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    gPicFilePath = openPicFileDlg.FileName;
                    FileStream fs = new FileStream(gPicFilePath, FileMode.Open, FileAccess.Read);
                    BinaryReader br = new BinaryReader(fs);
                    string str = br.ReadString();
                    //str = str.Replace(CDT.CDTTableStr, "");
                    byte[] pngBytes = Convert.FromBase64String(str);
                    MemoryStream ImageMS = new MemoryStream();
                    ImageMS.Write(pngBytes, 0, pngBytes.Length);
                    Bitmap resultBitmap = new Bitmap(ImageMS);
                    pictureBox1.Image = resultBitmap;
                    textBoxPicture.Text = str;
                }
                catch (IOException ex)
                {
                    throw ex;
                }
            }
        }
    }
}
上一篇:jdk版本切换


下一篇:[UWP]为附加属性和依赖属性自定义代码段(兼容UWP和WPF)