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、准备图片
- 一个背景图
- 一个ico格式图片(图片转换为ico格式时必须使用专业软件)
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
,右侧找到属性,点击闪电图标,双击DragDrop
和DragEnter
,添加拖放和拖进事件
选中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
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) - 打开输出文件夹