Загрузить многокадровые значки

Кто-нибудь знает класс, который может читать многокадровые значки? Поиск в интернете не дал никакой информации.

Я попытался использовать IconTools 2.0 от Алана Питера Стоца, который правильно загружает значки в список, но битовая глубина для 8-битных и 4-битных значков возвращается как 0. Битовая глубина для 32- и 24-битных фреймов значков составляет однако вернулся правильно.

Сама иконка выглядит правильно при просмотре... просто битовая глубина неверна для упомянутых битов.

РЕДАКТИРОВАТЬ #2 Основываясь на комментарии TLama, вот непроверенный код:

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?

РЕДАКТИРОВАТЬ №3 Согласно файлу справки «Если файл является файлом .ICO, возвращаемое значение ExtractIcon равно 1». Итак, какой метод можно использовать для получения количества значков в файле ico?

6
задан kobik 23 March 2012 в 14:35
поделиться