誰かがマルチフレームアイコンを読むことができるクラスについて知っていますか?インターネットを検索しても情報は得られていません。MultiFrameアイコンをロード
アイコンをリストに正しくロードするAlan Peter StotzがIconTools 2.0を使用しようとしましたが、8ビットと4ビットアイコンのビット深度が0に戻りました。32ビットと24ビットのアイコンフレームのビット深度しかし、正しく返されます。
表示されるアイコン自体は正しく表示されます...言及されたビットのビット深度が間違っています。ここTLamaによってコメントにBaised
EDIT#2 は、いくつかの未テストコードです:
function NumberOfIcons (AFileName: string): integer;
var
iNumberOfIcons: Integer;
begin
iNumberOfIcons := ExtractIcon (hInstance, PChar (AFilename), UINT (-1));
Result := iNumberOfIcons;
end;
function ExtractAnIcon (AFilename: string; AIndex: integer): TBitmap;
var
icoHandle: HIcon;
iBitmap: TBitmap;
iIcon: TIcon;
iNumberOfIcons, i: Integer;
begin
Result := nil;
iBitmap := TBitMap.Create;
iIcon := TIcon.Create;
try
// Get the number of Icons
iNumberOfIcons := ExtractIcon (hInstance, PChar (AFilename), UINT (-1));
// Extract the icon frame
icoHandle := ExtractIcon (hInstance, PChar (AFileName), AIndex);
iIcon.Handle := icoHandle;
iBitmap.Width := iIcon.Width;
iBitmap.Height := iIcon.Height;
// Draw the icon on your bitmap
DrawIcon (iBitmap.Canvas.Handle, 0, 0, iIcon.Handle);
Result := iBitmap;
finally
iIcon.Free;
end;
end;
function PixelFormatToBitDepth (APixelFormat: TPixelFormat): integer;
// Convert TPixelFormat to integer
begin
Result := -1;
case APixelFormat of
pf32Bit:
Result := 32;
pf24bit:
Result := 24;
pf8bit:
Result := 8;
pf4Bit:
Result := 4;
pf1bit:
Result := 1;
end;
end;
私は正しい軌道に乗っていますか?私のテストでは、今は1つのアイコンを取得しますが、NumberOfIcons関数は1を返していますか?
EDIT#3 ヘルプファイルによると、「ファイルが.icoファイルであれば、ExtractIconの戻り値は1です。」どのような方法を使ってicoファイルのアイコン数を取得できますか?ここで
あなたは、さらにそれらを編集することを計画しているか、あなただけのプログラムでそれらを使用するために欠けていますか?後者の場合は、リソースとしてリンクし、リソースAPIを使用してアイコンの正しいバージョンを取得する方が簡単です。 –
@David ...ビットマップを読み込むImageEditorでそれらを使用しようとしているので、アイコンを取得したらビットマップに変換し、幅と高さ、ビット深度を取得する必要があります。私はExtractIconを使用してTLamasのコメントでこれを行うよう試みています。私は、未テストのコードを編集として追加しました。 – Bill
@Bill、ImageEditorはDelphiに同梱されていますか?もしそうなら、それを忘れてください。私は良い経験を持っています。あなたがアイコンをいくつかのフォーマット(* .bmpを含む)にエクスポートすることを可能にするIcoFX(それの移植可能なバージョンもあります)。しかし、リソースファイルでビットマップだけを使用する必要はありません。任意のファイルタイプを使用できます。リソースファイルを自分でコンパイルするだけで済みます。 – TLama