C# 将位图转换为图标
我正在尝试将位图转换为图标。但是有一些错误,因为结果文件是空的C# 将位图转换为图标,c#,.net,winforms,C#,.net,Winforms,我正在尝试将位图转换为图标。但是有一些错误,因为结果文件是空的 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
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);
}
我已经试了很多次想弄明白这个问题,但都没能解决。
请告诉我问题出在哪里。本文介绍如何将位图转换为图标 它看起来和你的非常相似:
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文件。请在获取图标后使用销毁图标,以防止内存泄漏
[DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static bool DestroyIcon(IntPtr handle);
MSDN:您是否检查了
myIcon
是否包含有效数据?请查看这里@EnigmaState您的评论可以为标题myIcon.Dispose()提供一个合理的答案,或者我们必须按照您的要求执行吗?是否有一种可移植的方法来执行此操作?