当前位置:网站首页>使用VB.net将PNG图片转成icon类型图标文件
使用VB.net将PNG图片转成icon类型图标文件
2022-07-01 23:35:00 【机构师】
有的时候,需要用到icon图标型图片,但一般网站上不好找到适合自己的icon型图片,所以,如果能将适合的图片直接转换成icon格式,那么会方便很多。
使用vb.net,可以自己编写一个转换的小程序,这样,需要icon格式的时候,直接转换一下就行了。
程序:
01 建立中间存储流
Dim image As Image = New Bitmap(New Bitmap(ori), size) '读取源图片为bitmap,缩放至需要的大小
Dim bitmapstream As MemoryStream = New MemoryStream() '源图片的内存流
Dim iconstream As MemoryStream = New MemoryStream() 'ico图片的内存流
image.Save(bitmapstream, ImageFormat.Png) '源图片读取为设定格式并存入源图片内存流
Dim iconwriter As BinaryWriter = New BinaryWriter(iconstream) '新建二进制写入器,写入目标ico图片内存流
02 在流中写入头文件(这里应该是固定格式)
iconwriter.Write(Convert.ToInt16(0))
iconwriter.Write(Convert.ToInt16(1))
iconwriter.Write(Convert.ToInt16(1))
iconwriter.Write(Convert.ToByte(image.Width))
iconwriter.Write(Convert.ToByte(image.Height))
iconwriter.Write(Convert.ToInt16(0))
iconwriter.Write(Convert.ToInt16(0))
iconwriter.Write(Convert.ToInt16(32))
iconwriter.Write(Convert.ToInt32(bitmapstream.Length))
iconwriter.Write(22)
03 写入并保存icon图片信息
'将源图片写入目标ico图标内存流
iconwriter.Write(bitmapstream.ToArray())
'保存流,并将流指针定位至头部,以Icon对象进行读取输出为文件
iconwriter.Flush()
iconwriter.Seek(0, SeekOrigin.Begin)
Dim iconFileStream As Stream = New FileStream(dest, FileMode.Create)
Dim icon As Icon = New Icon(iconstream)
icon.Save(iconFileStream)
04 释放资源
'资源释放
iconFileStream.Close()
iconwriter.Close()
iconstream.Close()
bitmapstream.Close()
icon.Dispose()
image.Dispose()
上面是转换程序的关键代码,实际使用时,需要自己添加一下UI界面,方面操作。
完整程序:
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Text
'Imports png_to_icon
Public Class Form5
Dim orifilename As String
Dim destfilename As String
Dim imgfmt As ImageFormat
Private Sub Form5_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
Label1.Text = OpenFileDialog1.FileName
orifilename = OpenFileDialog1.FileName
End If
Dim a As String()
a = orifilename.Split(".")
Label2.Text = a(a.Length - 1)
End Sub
Private Sub p_to_ico(ori As String, dest As String, imgfmt As ImageFormat, size As Size)
If size.Width > 255 Or size.Height > 255 Then
MsgBox("ico图片尺寸超过范围", MsgBoxStyle.Exclamation, "警告消息!")
Exit Sub
End If
Dim image As Image = New Bitmap(New Bitmap(ori), size) '读取源图片为bitmap,缩放至需要的大小
Dim bitmapstream As MemoryStream = New MemoryStream() '源图片的内存流
Dim iconstream As MemoryStream = New MemoryStream() 'ico图片的内存流
image.Save(bitmapstream, ImageFormat.Png) '源图片读取为设定格式并存入源图片内存流
Dim iconwriter As BinaryWriter = New BinaryWriter(iconstream) '新建二进制写入器,写入目标ico图片内存流
'根据原图信息,进行头文件写入
iconwriter.Write(Convert.ToInt16(0))
iconwriter.Write(Convert.ToInt16(1))
iconwriter.Write(Convert.ToInt16(1))
iconwriter.Write(Convert.ToByte(image.Width))
iconwriter.Write(Convert.ToByte(image.Height))
iconwriter.Write(Convert.ToInt16(0))
iconwriter.Write(Convert.ToInt16(0))
iconwriter.Write(Convert.ToInt16(32))
iconwriter.Write(Convert.ToInt32(bitmapstream.Length))
iconwriter.Write(22)
'将源图片写入目标ico图标内存流
iconwriter.Write(bitmapstream.ToArray())
'保存流,并将流指针定位至头部,以Icon对象进行读取输出为文件
iconwriter.Flush()
iconwriter.Seek(0, SeekOrigin.Begin)
Dim iconFileStream As Stream = New FileStream(dest, FileMode.Create)
Dim icon As Icon = New Icon(iconstream)
icon.Save(iconFileStream)
ProgressBar1.Maximum = iconFileStream.Length
ProgressBar1.Value = iconFileStream.Length
'资源释放
iconFileStream.Close()
iconwriter.Close()
iconstream.Close()
bitmapstream.Close()
icon.Dispose()
image.Dispose()
'Return File.Exists(dest)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|ico files (*.ico)|*.ico|All files (*.*)|*.*"
SaveFileDialog1.FilterIndex = 2
SaveFileDialog1.RestoreDirectory = True
If SaveFileDialog1.ShowDialog = DialogResult.OK Then
Label3.Text = SaveFileDialog1.FileName
destfilename = SaveFileDialog1.FileName
End If
Dim a As String()
a = destfilename.Split(".")
Label7.Text = a(a.Length - 1)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim a As String
a = Label2.Text
If a = "png" Or a = "Png" Then
imgfmt = ImageFormat.Png
ElseIf a = "bmp" Or a = "Bmp" Then
imgfmt = ImageFormat.Bmp
ElseIf a = "jpeg" Or a = "Jpeg" Or a = "jpg" Then
imgfmt = ImageFormat.Jpeg
End If
' destfilename = "C:\Users\rongjv\Desktop\tt11.ico"
' btoico.p_to_ico.ctoico(orifilename, destfilename, New Size(128, 128))
p_to_ico(orifilename, destfilename, imgfmt, New Size(128, 128))
End Sub
End Class
界面:
界面比较简单,以实现功能为主。
边栏推荐
- 常见的积分商城游戏类型有哪些?
- 2021 RoboCom 世界机器人开发者大赛-本科组初赛
- mysql:insert ignore、insert和replace区别
- Windows 7 安装MYSQL 错误:1067
- 哈工大《信息内容安全》课程知识要点和难点
- 2022 R1 fast opening pressure vessel operation test questions and answers
- TS初次使用、ts类型
- 纪念成为首个DAYUs200三方demo贡献者
- Write some suggestions to current and future doctoral students to sort out and share
- 物联网技术应用属于什么专业分类
猜你喜欢

Zero foundation tutorial of Internet of things development

What is the mosaic tailgate?

Matplotlib常用设置

Development trend and future direction of neural network Internet of things

2022 crane driver (limited to bridge crane) examination questions and simulation examination

【必会】BM41 输出二叉树的右视图【中等+】

SWT/ANR问题--SWT 导致 kernel fuse deadlock

Matplotlib common settings

2022 safety officer-c certificate examination question simulation examination question bank and simulation examination

2022 examination questions and online simulation examination for safety management personnel of hazardous chemical business units
随机推荐
SWT / anr problem - SWT causes low memory killer (LMK)
The third part of the construction of the defense system of offensive and defensive exercises is the establishment of a practical security system
notBlank 和 notEmpty
距离度量 —— 汉明距离(Hamming Distance)
Why is PHP called hypertext preprocessor
Matplotlib常用图表
Applet form verification encapsulation
What is mosaic?
Switch to software testing, knowing these four points is enough!
dat. GUI
股票开户哪个证券公司最好,有安全保障吗
jpa手写sql,用自定义实体类接收
openwrt 开启KV漫游
每日三题 6.30(2)
PostgreSQL source code (57) why is the performance gap so large in hot update?
from pip._internal.cli.main import main ModuleNotFoundError: No module named ‘pip‘
2021 robocom world robot developer competition - preliminary competition of undergraduate group
TS initial use, TS type
Commemorate becoming the first dayus200 tripartite demo contributor
Who do you want to know when opening a stock account? Is it safe to open an account online?