一个ICON图标的转换程序
抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。废话不说,见代码。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace IconMaker
{
public partial class Form1 : Form
{
Bitmap srcBitmap = null;//用于保存原图
Size size;//用于保存目标图标的大小
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 选择源文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void browseBtn_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "图片(*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp";//筛选文件格式
dlg.ValidateNames = true;//文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
dlg.CheckFileExists = true;///验证文件有效性
dlg.CheckPathExists = true;//验证路径有效性
if (dlg.ShowDialog() == DialogResult.OK)
{
pathTb.Text = dlg.FileName;
srcBitmap = new Bitmap(dlg.FileName);
this.srcPanel.Refresh();
}
}
/// <summary>
/// 禁止用户在此TextBox中输入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
//禁止用户输入
e.Handled = true;
}
/// <summary>
/// 绘制原图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void srcPanel_Paint(object sender, PaintEventArgs e)
{
if (srcBitmap != null)
{
Graphics g = e.Graphics;
//原图的绘制区域
Rectangle rect = new Rectangle(0, 0, this.srcPanel.Width, this.srcPanel.Height);
//在规定区域缩放绘制原图
g.DrawImage(srcBitmap, rect);
}
}
/// <summary>
/// 实现bitmap到ico的转换
/// </summary>
/// <param name="bitmap">原图</param>
/// <returns>转换后的指定大小的图标</returns>
private Icon ConvertBitmap2Ico(Bitmap bitmap)
{
Bitmap icoBitmap = new Bitmap(bitmap, size);//创建制定大小的原位图
//获得原位图的图标句柄
IntPtr hIco = icoBitmap.GetHicon();
//从图标的指定WINDOWS句柄创建Icon
Icon icon = Icon.FromHandle(hIco);
return icon;
}
/// <summary>
/// 生成并保存图标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void makeBtn_Click(object sender, EventArgs e)
{
if (pathTb.Text != "" && sizeComb.Text != "")
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "图标(*.ico)|*.ico";
dlg.CheckPathExists = true;
if (dlg.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(dlg.FileName, FileMode.Create);
Icon icon = ConvertBitmap2Ico(srcBitmap);
this.Icon = icon;
icon.Save(fs);//将Icon保存的指定的输出
fs.Close();
}
}
}
/// <summary>
/// 选择目标图标的大小
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void sizeComb_SelectedIndexChanged(object sender, EventArgs e)
{
if (sizeComb.SelectedIndex == 0)
{
size = new Size(16, 16);
}
else if (sizeComb.SelectedIndex == 1)
{
size = new Size(32, 32);
}
else
{
size = new Size(48, 48);
}
}
}
}
点击下载源码
一个ICON图标的转换程序的更多相关文章
- Flex利用titleIcon属性给Panel容器标题部添加一个ICON图标
Flex利用titleIcon属性,给Panel容器标题部添加一个ICON图标. 让我们先来看一下Demo(可以右键View Source或点击这里察看源代码): 下面是完整代码(或点击这里察看): ...
- JS组件系列——不容错过的两款Bootstrap Icon图标选择组件
前言:最近好多朋友在群里面聊到bootstrap icon图标的问题,比如最常见的菜单管理,每个菜单肯定需要一个对应的菜单图标,要是有一个可视化的图标选择组件就好了,最好是直接选择图标,就能得到对应的 ...
- 字体在网页中画ICON图标
用字体在网页中画ICON图标有三种小技巧: 1.用CSS Sprite在网页中画小图标 实现方法: 首先将小图片整合到一张大的图片上 然后根据具体图标在大图上的位置,给背景定位.background- ...
- QT5.5.0版本添加icon图标步骤
1.制作icon图标文件 可以进入这个网站在线制作:http://www.ico.la/ 2.创建资源文件:qrc文件 接着 添加2两项,先点击prefix,然后添加文件--->图标路径 3.可 ...
- 启动页面设置,icon图标设置
更多尺寸像素如何放置请看:http://chicun.jammy.cc/ 如何设置App的启动图,也就是Launch Image? 新建一个iosLaunchImage文件夹
- 在网页中制作icon图标
用字体在网页中画icon图标 第一步:获取字体资源IconMoon网站https://icomoon.io iconMoon中有很多免费小图标可用,还能设置下载图标的使用属性(通过网站中设立的按钮pr ...
- 12个Icon图标资源网站
1.除了Icon以外,还有很多不错的UI设计素材. 地址:http://worldui.com/2.除了免费Icon资源下载以外,还提供Icon定制的付费服务.地址:http://dryicons.c ...
- UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
一.对UITabBar背景和icon图标的一些设置 (1)因为直接给UITabBar设置的背景颜色显示的不纯,半透明的感觉,所以,有时候我们可以直接利用纯色的图片作为背景达到想要的效果: (2)给ic ...
- 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
一.对UITabBar背景和icon图标的一些设置 (1)由于直接给UITabBar设置的背景颜色显示的不纯.半透明的感觉,所以,有时候我们能够直接利用纯色的图片作为背景达到想要的效果. (2)给ic ...
随机推荐
- Elixir游戏服设计四
上章说到我们要引入syn https://github.com/ostinelli/syn/ 看过文档,它并没有直接提供{via, Module, Name} 相关的方法.我们需要封装一下. Name ...
- cookie存储中文
写cookie Cookie chineseCookie = new Cookie( "chineseCookie ", URLEncoder. ...
- 使用Travis CI自动部署Hexo到GitHub
原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...
- dmesg和addr2line 定位 segfault
程序长时间运行崩溃,但是没有保存core dump消息.可以用下面的方法定位出程序出错位置: 1. 用dmesg查找出错的代码段地址 ip 000000000041ccec 发生错误时指令的地址, s ...
- GooglePlay - 排行榜及支付接入
前言 Google Play应用商店在国外Android市场中地位基本与AppStore在IOS中的地位一致,为此考虑国外的应用时,Android首要考虑的是接入GooglePlay的排行榜等支持. ...
- 数据库中有的字段为null时,反馈到页面上是什么也不显示?如何用一个【无】字来代替呢?
<asp:ListView ID="listViewCustomer" DataSourceID="ods_Customer" runat="s ...
- git 一口气带你走完git之旅
1.git是目前世界上最先进的分布式版本控制系统.svn是集成式版本控制系统,那么问题来了,什么叫分布式管理和集中式管理? 首先,svn 需要有一个中央服务器,协同开发者需要同中央服务器连接,所有的版 ...
- 符合语言习惯的Python优雅编程技巧
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀 ...
- RestServer 2.0 正式版发布
RestServer 2.0 正式版发布 使用许可&版权说明 在保持本软件完整的情况下可以将本软件用于任何商业用途. 本软件可以自由传播,但是请保持软件相关文件和说明文档完整. 未经许可不得将 ...
- RabbitMQ使用详解
刚刚用了,记录下来,以后忘了,方便能够快速想起来. 首先说明,由于RabbitMQ服务端非JAVA,C++语言,当然也就看不懂,所以本文的理解都是过于主观的. 一,RabbitMQ服务端搭建 推荐最好 ...