C# でアイコン イメージのハンドルを持っているとしましょう。コンテンツを有効な ICO ファイルとしてディスクに保存する方法はありますか? 私はすべてを試しましたが、運がありません。
私が考えた最初の解決策は、アイコン ハンドルに基づいて Bitmap オブジェクトを作成し、この Bitmap を ico としてファイルに保存することでした。問題は、.net の実装が機能せず、プレーンな PNG データしか出力しないことです。
次に、エンコーダーを自分で実装してみました。ICO コンテナーのヘッダーの説明に基づいて、これを実装し、魅力のように動作しますが、ペイロードとして png データを使用する場合のみです。
ビットマップデータを使用すると(これが必要です)、出力ファイルはOSによって有効な.icoファイルとして認識されません。
ビットマップ データを ICO コンテナーに書き込む方法に問題があることは 99% 確信しています。
記事に基づいて、ico ファイルの形式が PNG 画像の場合、PNG ヘッダーと一緒に書き込む必要があることがわかりました。ビットマップ イメージの場合は、ビットマップ ヘッダーなしでビットマップの生データのみを書き込む必要があります。
さて、私が試したのは、Bitmap オブジェクトの Lockbits() 関数を使用してビットマップ データ (バイト配列として) を取得し、ico ヘッダーの後に書き込み、ファイルを保存することです。私はヘッダーを正しく書いたと確信しています。しかし、私は何かが欠けていると思います。
ビットマップデータをicoファイルに書き込む正しい方法は何ですか?? また、HICON(C#ではINtPtr)ハンドルの内容をicoファイルに書き込む別の解決策があるのだろうか。