首页 > 编程语言 >C# save image file as string file and convert string as image ,save as image file

C# save image file as string file and convert string as image ,save as image file

时间:2024-07-12 17:59:02浏览次数:7  
标签:string image System private file new using public

 private void ConvertImageToString()
 {
     byte[] bytesArr = File.ReadAllBytes(SelectedBk.ImgUrl);
     string imgBase64Str = Convert.ToBase64String(bytesArr);
     imgFileName = $"{DateTime.Now.ToString("yyyyMMddHHmmssffff")}_{Guid.NewGuid().ToString()}_img.txt";
     File.AppendAllText(imgFileName, imgBase64Str);
 }


 private void ConvertFromStringToImage()
 {
     if (File.Exists(imgFileName))
     {
         string baseStr = File.ReadAllText(imgFileName);
         byte[] imgBytes = Convert.FromBase64String(baseStr);
         using (MemoryStream memoryStream = new MemoryStream(imgBytes))
         {
             System.Drawing.Image imgFile = System.Drawing.Image.FromStream(memoryStream);
             SaveFileDialog dialog = new SaveFileDialog();
             dialog.Filter = "Image Files|*.jpg;*.jpeg|All Files|*.*";
             if (dialog.ShowDialog() == true)
             {
                 imgFile.Save(dialog.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
             }
         }
     }
 }
<Window x:Class="WpfApp208.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp208"
        mc:Ignorable="d" WindowState="Maximized"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox x:Name="lbx" SelectedIndex="0" Grid.Column="0" ItemsSource="{Binding BooksList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                 SelectedItem="{Binding SelectedBk,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Image Source="{Binding ImgUrl}" Width="200" Height="500"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Image Grid.Column="1" x:Name="img" Source="{Binding SelectedItem.ImgUrl,ElementName=lbx}">
            <Image.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Save as String" Command="{Binding SaveCmd}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu},Path=PlacementTarget}"/>
                    <MenuItem Header="Save Image File" Command="{Binding SaveImgCmd}"/>
                </ContextMenu>
            </Image.ContextMenu>
        </Image>
    </Grid>
</Window>



//cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Collections;
using System.Drawing;
using Microsoft.Win32;

namespace WpfApp208
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var vm = new BookVM();
            this.DataContext = vm;
        }
    }

    public class BookVM : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propName)
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler?.Invoke(this, new PropertyChangedEventArgs(propName));
            }
        }

        public BookVM()
        {
            InitData();
        }

        private void InitData()
        {
            var imgsList = Directory.GetFiles(@"..\..\Images");
            int len = imgsList.Length;
            BooksList = new List<Book>();
            for (int i = 0; i < 100000; i++)
            {
                BooksList.Add(new Book()
                {
                    Id = i + 1,
                    ImgUrl = imgsList[i % len]
                });
            }
        }

        private List<Book> booksList;
        public List<Book> BooksList
        {
            get
            {
                return booksList;
            }
            set
            {
                if (booksList != value)
                {
                    booksList = value;
                    OnPropertyChanged(nameof(BooksList));
                }
            }
        }

        private Book selectedBk;
        public Book SelectedBk
        {
            get
            {
                return selectedBk;
            }
            set
            {
                if (value != selectedBk)
                {
                    selectedBk = value;
                    OnPropertyChanged(nameof(SelectedBk));
                }
            }
        }

        private DelCmd saveCmd;
        public DelCmd SaveCmd
        {
            get
            {
                if (saveCmd == null)
                {
                    saveCmd = new DelCmd(SaveCmdExecuted, SaveCmdCanExecute);
                }
                return saveCmd;
            }
        }

        private bool SaveCmdCanExecute(object obj)
        {
            return SelectedBk != null && File.Exists(SelectedBk.ImgUrl);
        }

        string imgFileName { get; set; }
        private void SaveCmdExecuted(object obj)
        {
            ConvertImageToString(); 
        }
        
        private void ConvertImageToString()
        {
            byte[] bytesArr = File.ReadAllBytes(SelectedBk.ImgUrl);
            string imgBase64Str = Convert.ToBase64String(bytesArr);
            imgFileName = $"{DateTime.Now.ToString("yyyyMMddHHmmssffff")}_{Guid.NewGuid().ToString()}_img.txt";
            File.AppendAllText(imgFileName, imgBase64Str);
        }

        private DelCmd saveImgCmd;
        public DelCmd SaveImgCmd
        {
            get
            {
                if (saveImgCmd == null)
                {
                    saveImgCmd = new DelCmd(SaveImgCmdExecuted);
                }
                return saveImgCmd;
            }
        }

        private void SaveImgCmdExecuted(object obj)
        {
            ConvertFromStringToImage();
        }

        private void ConvertFromStringToImage()
        {
            if (File.Exists(imgFileName))
            {
                string baseStr = File.ReadAllText(imgFileName);
                byte[] imgBytes = Convert.FromBase64String(baseStr);
                using (MemoryStream memoryStream = new MemoryStream(imgBytes))
                {
                    System.Drawing.Image imgFile = System.Drawing.Image.FromStream(memoryStream);
                    SaveFileDialog dialog = new SaveFileDialog();
                    dialog.Filter = "Image Files|*.jpg;*.jpeg|All Files|*.*";
                    if (dialog.ShowDialog() == true)
                    {
                        imgFile.Save(dialog.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                    }
                }
            }
        }
    }

    public class DelCmd : ICommand
    {
        public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }

        private readonly Action<object> execute;
        private readonly Predicate<object> canExecute;

        public DelCmd(Action<object> executeValue, Predicate<object> canExecuteValue)
        {
            execute = executeValue;
            canExecute = canExecuteValue;
        }

        public DelCmd(Action<object> executeValue) : this(executeValue, null)
        {
        }

        public bool CanExecute(object parameter)
        {
            if (canExecute == null)
            {
                return true;
            }
            return canExecute(parameter);
        }

        public void Execute(object parameter)
        {
            execute(parameter);
        }
    }

    public class Book
    {
        public int Id { get; set; }

        public string ImgUrl { get; set; }
        public string Name { get; set; }
    }
}

 

标签:string,image,System,private,file,new,using,public
From: https://www.cnblogs.com/Fred1987/p/18299122

相关文章

  • C#经典面试题:执行string abc=“aaa“+“bbb“+“ccc“共分配了多少内存?
    C#经典面试题:执行stringabc="aaa"+"bbb"+"ccc"共分配了多少内存?这是一个经典的基础知识题目,它涉及了字符串的类型、堆栈和堆的内存分配机制,因此被很多人拿来考核开发者的基础知识功底。首先,我们都知道,判断值类型的标准是查看该类型是否会继承自System.ValueType,通过查看和......
  • rsyslog配置(服务端、客户端)-UDP-TCP转发-imfile自定义应用程序的日志推送
    ##概念#Syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它。通过设置一个syslog服务器,可以将不同设施/主机发送的日志,过滤和合并到一个独立的位置,这样使得你更容易地查......
  • C# winform e.Graphics.DrawString 旋转打印一例
    前段时间的合格证标签打印老是卡纸,车间将纸竖过来放卡纸少很多,程序也要做修改,在原程序上加了以下两行代码;e.Graphics.TranslateTransform(285,685);e.Graphics.RotateTransform(-90.0F);第一行的两个坐标,要一点一点调试,没有找到什么科学的......
  • 【C++修行之道】string类的使用
    目录一.C语言中的字符串二、标准库中的string类(了解)2.1string类(了解)2.2帮助文档阅读三、string类的常用接口说明3.1 string类对象的常见构造 3.2 string类对象的容量操作3.3 string类对象的访问及遍历操作字符串类的简单实现3.4 string类对象的修改操作......
  • Java性能优化-switch性能优化-用String还是int做比较
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751参考以上性能测试工具的使用。下面针对Java中对switch-case比较时使用String还是int性能做对比。注:博客:https://bl......
  • 在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信
    在Linux系统中,当你遇到使用touchtest.file命令创建新文件时报错提示磁盘已满,但使用df-h命令查看磁盘使用率时却显示只有60%的磁盘空间被使用,这种情况可能由以下几个原因造成:inode耗尽:在Linux文件系统中,每个文件或目录都需要一个inode(索引节点)来存储其元数据(如权限、所有者......
  • FILE+POS 方式 GreatSQL 主从复制架构给主节点磁盘扩容
    FILE+POS方式GreatSQL主从复制架构给主节点磁盘扩容一、前提在一套非常老的系统上,有一套GreatSQL主从集群(1主1从),主从复制采用的是FILE+POS方式复制,磁盘使用紧张需要扩容,只能在该台机器上添加更大的磁盘,将原数据盘替换,也没有其他的机器资源替换。这套系统没有VIP,没有高可用切......
  • [1029] Download files by wget in Python
    Syntax: wget(url,destination_path)Certainly!Let’sembarkonafile-fetchingadventurewithPythonandourtrustysidekick,wget.......
  • Java中的Map<String, String>
            在Java中,Map<String,String>是一种泛型集合类型,表示一个键值对(key-valuepair)的映射,其中键和值都是字符串类型。在你的代码中,Map<String,String>用于表示HTTP请求体和响应体的数据。        具体来说,Map<String,String>的作用如下:        ......
  • dockerfile构建镜像
        上回书说到containerd的基础命令,但是containerd无法构建镜像,但dockerfile可以,所以这一节我们就来探究一下何为dockerfile?一、什么是dockerfile    dockerfile是一种用于定义和构建docker镜像的文本文件,由一行行指令和参数组成,用于描述镜像的构建和配......