• 2018-12-27-WPF-从文件创建图片的方法


    title author date CreateTime categories
    WPF 从文件创建图片的方法
    lindexi
    2018-12-27 11:37:46 +0800
    2018-12-27 11:37:46 +0800
    WPF

    本文告诉大家通过 FileStream 创建文件的方法

    如果直接通过文件的 URL 创建,那么可能出现文件被占用的问题,不能比较好做文件的修改,建议通过内存的方式加载

    下面是通过内存加载的代码

                var bitmapImage = new BitmapImage();
                using (var fileStream = new FileStream("文件路径", FileMode.Open))
                {
                    var memoryStream = new MemoryStream();
    
                    fileStream.CopyTo(memoryStream);
    
                    memoryStream.Seek(0, SeekOrigin.Begin);
    
                    bitmapImage.BeginInit();
                    bitmapImage.StreamSource = memoryStream;
                    bitmapImage.EndInit();
                }
    

    通过这个方法加载的图片没有做内存的优化,也就是图片多大,占用的内存就多大

    这里存在两个坑,第一个是 memoryStream 在复制之后需要移动到前面,如果没有设置,就会出现下面的代码

    FileFormatException: 无法对此图像进行解码。该图像头可能已损坏。

    通过设置 memoryStream.Seek(0, SeekOrigin.Begin) 可以解决这个问题,原因是这个流在复制的时候会将指针放在流的最后,但是图片的解析需要将流指针放在最前这样才可以解析

    那么此时的 memoryStream 是否可以释放?

    如果调用了 memoryStream.Dispose 就会显示空白而不是图片

                var bitmapImage = new BitmapImage();
                using (var fileStream = new FileStream("E:\文档\图片\2018102016485273.jpg", FileMode.Open))
                {
                    var memoryStream = new MemoryStream();
    
                    fileStream.CopyTo(memoryStream);
    
                    memoryStream.Seek(0, SeekOrigin.Begin);
    
                    bitmapImage.BeginInit();
                    bitmapImage.StreamSource = memoryStream;
                    bitmapImage.EndInit();
    
                    // 下面的代码会让图片显示空
                    //memoryStream.Dispose();
                }

    因为图片需要读取内容,但是内容已经是空的,就没有显示

  • 相关阅读:
    RESTful日#2:使用Unity容器和引导程序在Web api中使用依赖注入实现控制反转
    RESTful日#2:使用Unity容器和引导程序在Web api中使用依赖注入实现控制反转
    带有可选选项的输入文本框(组合框)
    在组合框中嵌入一个DataGridView
    ItemData在。net
    实现一个所有者绘制的组合框
    模板化的“请等待”按钮和模板控件介绍
    使用AvalonEdit (WPF文本编辑器)
    办公风格的扁平组合箱
    【windows】telnet 和一些dos命令
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085965.html
Copyright © 2020-2023  润新知