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个字节后不相同。

     

  • 相关阅读:
    一句代码实“.NET技术”现批量数据绑定[上篇] 狼人:
    目录搜索Unity与本地库交互
    微软脱机实验五十微软应用程序虚拟化之五APPV 5.1脱机使用应用程序
    文件编码H264编解码器性能测试
    串字符串KMP hdu3613Best Reward
    等待时间clientNYOJ 179 LK's problem
    tag备份Oracle Rman技术总结(一)——备份
    任务队列ThreadPoolExecutor线程池的使用与理解
    数量queuepoj1149 PIGS
    android手机Android屏幕分辨率、密度的正确获取
  • 原文地址:https://www.cnblogs.com/chenyingzuo/p/11877246.html
Copyright © 2011-2022 走看看