zoukankan      html  css  js  c++  java
  • c#图片相关常用的方法及处理

    总结一下图片相关,常用的几个操作
     
    一 创建Image对象

    1. 手头上有一些图片文件,希望转换成 c# 中 Image对象,然后加以使用。

    public static System.Drawing.Image FromFile (string filename);

    举个例子,建立一个winform工程,设置一下窗体的背景图片。

      public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                Image image = Image.FromFile("Image.png");
                this.BackgroundImage = image;
            }
        }

    运行效果:

    二 图片存储与显示

    1. Image ---> Byte数组

    Image对象保存成byte数组,进而存储在文件或者数据库里。

           using (var memoryStream = new MemoryStream())
                {
                    var image = Image.FromFile("Image.png");
                    image.Save(memoryStream, ImageFormat.Png);
                    var byteArr = memoryStream.ToArray();
                }

    2. Byte数组 ---> Image

    从文件或数据库里读出来的数据,也可以再转换成Image对象。

    var image1 = new ImageConverter().ConvertFrom(byteArr);
    this.BackgroundImage = (Image)image1;

     直接读取图片文件存储的二进制数据也可以转换成Image对象。

    var originByte = File.ReadAllBytes("Image.png");
    var image1 = new ImageConverter().ConvertFrom(originByte);
    this.BackgroundImage = (Image)image1;

     比较一下两者的二进制数据,还是有差异的。Image对象的数据量更大一些。但是经过我的测试。

     两种数据都能被ImageConverter正确解析。

         private void button1_Click(object sender, EventArgs e)
            {
                using (var memoryStream = new MemoryStream())
                {
                    var image = Image.FromFile("Image.png");
                    image.Save(memoryStream, ImageFormat.Png);
                    var byteArr = memoryStream.ToArray();
    
                    var originByte = File.ReadAllBytes("Image.png");
                    WriteData("imageObj.txt", byteArr);
                    WriteData("originFile.txt", originByte);
                }
            }
    
            private static void WriteData(string filename, byte[] target)
            {
                var list = new List<string>();
                for (var i = 0; i < target.Length; i++)
                {
                    list.Add($"{i}-->{target[i]}");
                }
                File.AppendAllLines(filename, list);
            }

     我换了一张很小的图片做比较。可以参考一下比较的片段,从第36个字节后不相同。

     

  • 相关阅读:
    最近面试有感,不要耍小聪明,面试官都是开了上帝视角的
    Mac OS X上编写 ASP.NET vNext 系列中断和再开声明
    Mac OS X 上编写 ASP.NET vNext (二) IDE配置
    Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建
    Redhat Linux /etc/profile 与 /etc/bashrc 的区别
    IIS7 Application Pool Integrate Mode 和 Classic Mode 的区别
    Linux 学习笔记(一) 入门
    SQL Server 常用分页SQL
    winform 如何控制输入法
    winform 记录全局异常捕获
  • 原文地址:https://www.cnblogs.com/chenyingzuo/p/11877246.html
Copyright © 2011-2022 走看看