我正在尝试将位图转换为图标。但是有一些错误,因为结果文件只是空白。
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);
}
我已经做了很多努力来弄清楚问题,但却做不到。 请告诉我问题出在哪里。
答案 0 :(得分:10)
请在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
答案 1 :(得分:8)
本文介绍如何将位图转换为图标。
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);
}
尝试一下。
已编辑:添加了使用声明。
答案 2 :(得分:3)
此代码的唯一问题是它支持高达128x128的位图图像。
如果位图的大小更大,它会产生一个空白的ico文件。
答案 3 :(得分:2)
此SO question此how to convert an image to an icon链接指向solution,可能会引导您朝着正确的方向前进。
但请注意,需要修改编写的代码以避免句柄泄漏。但{{3}}也与此问题相关联。