将位图转换为图标
本文关键字:图标 转换 位图 | 更新日期: 2023-09-27 18:14:56
我正在尝试将位图转换为图标。但是有一些错误,因为生成的文件只是空白。
private void btnCnvrtSave_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(sourceFile); //sourceFile = openfiledialog.FileName;
IntPtr Hicon = bmp.GetHicon();
Icon myIcon = Icon.FromHandle(Hicon);
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "Save Icon";
sfd.Filter = "Icon|*.ico";
sfd.ShowDialog();
FileStream fileStream = new FileStream(sfd.FileName, FileMode.OpenOrCreate);
myIcon.Save(fileStream);
fileStream.Flush();
fileStream.Close();
MessageBox.Show("Image is converted successfully!");
//Process.Start(sfd.FileName);
}
我已经试了很多办法来找出这个问题,但是没有成功。请告诉我问题在哪里
请在GetHicon之后使用DestroyIcon,以防止内存泄漏
[DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static bool DestroyIcon(IntPtr handle);
MSDN: https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.gethicon%28v=vs.110%29.aspx
本文介绍如何将位图转换为图标。
http://www.go4expert.com/forums/showthread.php?t=19250看起来和你的很像:
using (Cbitmap = new Bitmap(sourceImage.Text))
{
Cbitmap.MakeTransparent(Color.White);
System.IntPtr icH = Cbitmap.GetHicon();
Icon ico = Icon.FromHandle(icH);
}
using (System.IO.FileStream f = new System.IO.FileStream(destinationFldr.Text + "''image.ico", System.IO.FileMode.OpenOrCreate))
{
ico.Save(f);
}
试一试
编辑:添加using语句
这段代码的唯一问题是它支持最高128x128的位图图像。
如果位图的大小较大,则生成一个空白的ico文件。
此外,这个问题链接到如何将图像转换为图标,这可能会引导你在正确的方向。
但是,请注意,编写的代码需要修改以避免句柄泄漏。但解决方案也与这个问题有关。