winform的helloworld

时间:2022-12-12 01:07:04

1、下载安装VC++ 2008运行库

微软官网32位直链 - 微软官网
32位直链 - 360软件
注意:SharpDevelop需要32位的VC++ 2008运行库,64位的无效

2、下载安装SharpDevelop_5.1.0.5216_Setup.msi

SharpDevelop - sourceforge下载渠道
SharpDevelop - Github发行页面

3、设置语言

菜单栏 - Tools - Options… - General - UI Language,选择Chinese。重新启动SharpDevelop。

4、设置数据收集器

选择我不想参与,点击保存。软件已经停更了,没什么可改进的。

5、准备图片

  1. 一个背景图
    winform的helloworld
  2. 一个ico格式图片(图片转换为ico格式时必须使用专业软件)
    winform的helloworld

6、设计界面

菜单栏 - 文件 - 新建 - 解决方案(S)…(Ctrl+Shift+N),弹出新项目窗口
C#类别 - Windows应用程序,模板选择 Windows 应用程序
输入名称:img2base64,点击建立

在软件左数⅙下数⅓处找到并点击设计按钮,从源代码窗口切换到设计窗口
左下角找到并点击工具按钮,从项目窗口切换到工具窗口
双击img2base64主窗口,添加加载事件
选中img2base64主窗口,右侧找到属性
Layout - Size,设置为900, 300
Window Style - Icon,导入ico图标
Window Style - MaximizeBox,设置为False

左侧工具展开Windows Forms,拖拽PictureBox到设计窗口上
选中PictureBox,右侧找到属性,点击闪电图标,双击DragDropDragEnter,添加拖放和拖进事件
选中PictureBox,右侧找到属性
Layout - Location,设置为12, 12
Layout - Size,设置为237, 237
Appearance - BackgroundImage,导入本地资源,设置为背景图
Behavior - SizeMode,设置为StretchImage

拖拽Button到设计窗口上
选中Button,右侧找到属性
Layout - Location,设置为256, 12
Layout - Size,设置为75, 115
Appearance - Text,设置为图像转换为base64
双击Button,添加单击事件

再拖拽Button到设计窗口上
选中第二个Button,右侧找到属性
Layout - Location,设置为256, 133
Layout - Size,设置为75, 115
Appearance - Text,设置为base64转换为图像
双击第二个Button,添加单击事件

拖拽TextBox到设计窗口上
选中TextBox,右侧找到属性
Behavior - Multiline,设置为True
Layout - Location,设置为338, 13
Layout - Size,设置为534, 236
winform的helloworld

7、编写代码

MainForm.cs

/*
 * 由SharpDevelop创建。
 * 用户: 三巧(https://blog.csdn.net/qq_39124701)
 * 日期: 2023/3/28
 * 时间: 11:06
 * 
 * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace img2base64
{
	/// <summary>
	/// Description of MainForm.
	/// </summary>
	public partial class MainForm : Form
	{
		public ImageType current_picture_type = ImageType.None;
		
		public MainForm()
		{
			InitializeComponent();
		}
		
		void MainFormLoad(object sender, EventArgs e)
		{
			pictureBox1.AllowDrop = true;
		}
		
		void PictureBox1DragDrop(object sender, DragEventArgs e)
		{
			var items = (object)e.Data.GetData("FileNameW") as string[];
			if (items.Length == 1) {
				var img = Image.FromFile(items[0]);
				current_picture_type = ImageTypeCheck.CheckImageType(items[0]);
				var fileinfo = new System.IO.FileInfo(items[0]);
				if (fileinfo.Length > 102400) {
					MessageBox.Show("大于100KB,可能无法完全转换");
				}
				var bmp = new Bitmap(img);
				img.Dispose();
				pictureBox1.Image = bmp;
				
				pictureBox1.BackgroundImage = null;
			}
		}
		void PictureBox1DragEnter(object sender, DragEventArgs e)
		{
			e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None;
		}
		
		void Button1Click(object sender, EventArgs e)
		{
			if (pictureBox1.Image == null) {
				MessageBox.Show("没有加载图片");
			}else{
				if (current_picture_type == ImageType.None) {
					MessageBox.Show("错误");
					return;
				}
				if (current_picture_type == ImageType.GIF) {
					textBox1.Text = "data:image/gif;base64," + ImageToBase64(pictureBox1, current_picture_type);
					return;
				}
				if (current_picture_type == ImageType.JPG) {
					textBox1.Text = "data:image/jpeg;base64," + ImageToBase64(pictureBox1, current_picture_type);
					return;
				}
				textBox1.Text = "data:image/png;base64," + ImageToBase64(pictureBox1, current_picture_type);
			}
		}
		void Button2Click(object sender, EventArgs e)
		{
			Base64ToImage(textBox1,pictureBox1);
		}
		
		/// <summary>
        /// base64 转 Image
        /// </summary>
        public static void Base64ToImage(TextBox textBox1, PictureBox picturebox1)
        {
        	string base64 = textBox1.Text;
            base64 = base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "").Replace("data:image/gif;base64,", "");
            try {
            	byte[] bytes = Convert.FromBase64String(base64);
            	var memStream = new System.IO.MemoryStream(bytes);
	            Image mImage = Image.FromStream(memStream);
	            var bp = new Bitmap(mImage);
	            picturebox1.Image = bp;
            }catch (Exception ex){
            	MessageBox.Show("无法识别为base64");
            }            
        }
 
        /// <summary>
        /// Image 转成 base64
        /// </summary>
        public static string ImageToBase64(PictureBox pictureBox1, ImageType current_picture_type)
        {
        	var bmp = (Bitmap)pictureBox1.Image;
            var ms = new System.IO.MemoryStream();
            if (current_picture_type == ImageType.PNG) {
            	bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            }else{
            	bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            var arr = new byte[ms.Length]; ms.Position = 0;
            ms.Read(arr, 0, (int)ms.Length); ms.Close();
            return Convert.ToBase64String(arr);
        }
	}
	
	  /// <summary>
    /// 实现通过文件头2个字节判断图片的格式。
    /// </summary>
    public static class ImageTypeCheck
    {
        static ImageTypeCheck()
        {
            _imageTag = InitImageTag();
        }
        private static readonly SortedDictionary<int, ImageType> _imageTag ;

        public static readonly string ErrType = ImageType.None.ToString();

        private static SortedDictionary<int, ImageType> InitImageTag()
        {
            var list = new SortedDictionary<int, ImageType>();

            list.Add((int)ImageType.BMP, ImageType.BMP);
            list.Add((int)ImageType.JPG, ImageType.JPG);
            list.Add((int)ImageType.GIF, ImageType.GIF);
            list.Add((int)ImageType.PCX, ImageType.PCX);
            list.Add((int)ImageType.PNG, ImageType.PNG);
            list.Add((int)ImageType.PSD, ImageType.PSD);
            list.Add((int)ImageType.RAS, ImageType.RAS);
            list.Add((int)ImageType.SGI, ImageType.SGI);
            list.Add((int)ImageType.TIFF, ImageType.TIFF);
            return list;

        }

        /// <summary> 
        /// 通过文件头判断图像文件的类型 
        /// </summary> 
        /// <param name="path"></param> 
        /// <returns></returns> 
        public static string CheckImageTypeName(string path)
        {
            return CheckImageType(path).ToString();
        }
        /// <summary> 
        /// 通过文件头判断图像文件的类型 
        /// </summary> 
        /// <param name="path"></param> 
        /// <returns></returns> 
        public static ImageType CheckImageType(string path)
        {
            var buf = new byte[2];
            try
            {
                using (var sr = new System.IO.StreamReader(path))
                {
                    int i = sr.BaseStream.Read(buf, 0, buf.Length);
                    if (i != buf.Length)
                    {
                        return ImageType.None;
                    }
                }
            }
            catch (Exception ex)
            {
                //Debug.Print(exc.ToString());
                return ImageType.None;
            }
            return CheckImageType(buf);
        }

        /// <summary> 
        /// 通过文件的前两个自己判断图像类型 
        /// </summary> 
        /// <param name="buf">至少2个字节</param> 
        /// <returns></returns> 
        public static ImageType CheckImageType(byte[] buf)
        {
            if (buf == null || buf.Length < 2)
            {
                return ImageType.None;
            }

            int key = (buf[1] << 8) + buf[0];
            ImageType s; 
			return _imageTag.TryGetValue(key, out s) ? s : ImageType.None; 
        }

    }

    /// <summary> 
    /// 图像文件的类型 
    /// </summary> 
    public enum ImageType
    {
        None = 0,
        BMP = 0x4D42,
        JPG = 0xD8FF,
        GIF = 0x4947,
        PCX = 0x050A,
        PNG = 0x5089,
        PSD = 0x4238,
        RAS = 0xA659,
        SGI = 0xDA01,
        TIFF = 0x4949
    }
}

8、exe文件位置

菜单栏 - 项目(P) - 打开输出文件夹

9、最终效果

winform的helloworld