2011-11-17 11 views
16

ビットマップをアイコンに変換しようとしています。しかし、結果のファイルが空白になっているので、何らかのエラーがあります。ビットマップをアイコンに変換する

private void btnCnvrtSave_Click(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(sourseFile); //sourseFile = 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); 
} 

私は問題を理解するために多くのことを試みましたが、できませんでした。 問題がどこにあるか教えてください。

+2

あなたは 'myIcon'は有効なデータが含まれていることを確認しましたか? – ChrisF

+0

このコードは私のために正常に実行され、私にアイ​​コンを教えてください、あなたの問題はどこですか? –

+0

plsここを見てくださいhttp://www.codeproject.com/KB/GDI-plus/safeicon.aspx –

答えて

3

このコードの唯一の問題は、最大128x128のビットマップイメージをサポートしていることです。

ビットマップのサイズが大きい場合、空のicoファイルが生成されます。

6

この資料では、ビットマップをアイコンに変換する方法について説明します。

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); 
} 

はそれを試してみてください。

EDITED:usingステートメントが追加されました。

2

また、SO questionhow to convert an image to an iconにリンクしており、正しい方向につながる可能性があります。

ただし、ハンドルリークを避けるために、記述したコードを変更する必要があることに注意してください。しかし、solutionもその質問にリンクされています。

9

してください、メモリを防ぐために、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

+0

myIcon.Dispose()は十分ですか、あなたが話したことをしなくてはなりませんか? – farukdgn

+0

@farukdgnいいえ、十分ではありません... – Nigrimmist

+0

これを行うための移植可能な方法はありませんか? –

関連する問題