2011-01-04 3 views
0

Мое приложение загружает и отображает значки для определенных сайтов. Я последовал за Bing's solution для обнаружения формата изображения из потока, но ударил еще одну загвоздку. Предполагая, что фактическое изображение значка, код выглядит следующим образом:Загрузка определенного размера значка в TIcon из потока

var 
    icon : TIcon; 
begin  
    icon := TIcon.Create; 
    try 
    icon.LoadFromStream(faviconStream); 
    spFavicon.Glyph.Assign(icon); 
    finally 
    icon.Free; 
    end; 
end; 

(spFavicon является TRzGlyphStatus от Raize компонентов Его свойство Glyph является TBitmap.)

Теперь, это работает, но иногда загруженный значок содержит несколько изображений разных размеров, например 32x32 в дополнение к ожидаемому 16x16. По какой-то причине свойство Glyph элемента управления выбирает больший размер.

Как я могу загрузить только размер 16x16 в TIcon или из TIcon в TBitmap?

Тест Favicon: http://www.kpfa.org/favicon.ico

На редактирования: Если это вообще возможно, я предпочел бы избежать сохранения значок в файл первой.

+0

Я знаю, что могу использовать значок.SetSize (16, 16), чтобы уменьшить значок, но эффект не совсем такой, как если бы было загружено исходное изображение 16x16. –

+0

Проверьте этот вопрос http://stackoverflow.com/questions/3813845 – RRUZ

ответ

0

Основной источник для формата файла .ico находится на MSDN. Вы должны уметь это исправить.

Процедура ReadIcon в Graphics.pas может пригодиться, но я полагаю, что вам нужно найти только 16x16, так как вы ищете значки.

Если вы хотите получить очень мило, вы можете скачать источник, скажем, Firefox, и посмотреть, как они обрабатывают значки.

+1

Странно, что ReadIcon не отображается в разделе «Интерфейс» или что, по-видимому, нет «официального» механизма для этой общей потребности. На данный момент я обнаружил, что вызов TIcon.SetSize (16, 16) перед загрузкой из потока, похоже, делает трюк. –

+1

@moodforaday Да, это лучший способ сделать это. Я не знал об этом особом ньюансе ReadIcon - сегодня я узнал что-то еще! –

 Смежные вопросы

  • Нет связанных вопросов^_^