将位图转换为图标

本文关键字:图标 转换 位图 | 更新日期: 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文件。

此外,这个问题链接到如何将图像转换为图标,这可能会引导你在正确的方向。

但是,请注意,编写的代码需要修改以避免句柄泄漏。但解决方案也与这个问题有关。