Перейти к содержанию
  • Регистрация
  • 0
Alex Bakulin

Загрузка произвольной картинки в TImageList динамически

Вопрос

Всем привет. Есть задача загрузить изображение по сети в TImageList. Вроде бы все должно срабатывать, но изобряжения не появляются. Скорее всего дело в том, что изображение произвольные, чаще в формате Jpeg. Подскажите, как лучше сделать? 

function LoadImage(URL: string): integer;
var
  Stream: TMemoryStream;
  Item: TCustomSourceItem;
  B: TBitmap;
  BI: TCustomBitmapItem;
begin
  Result := 0;
  if URL <> '' then
  with TNetHTTPClient.Create(nil) do
  begin
    Stream:= TMemoryStream.Create;
    Get(URL, Stream);
    Item := ImageList.Source.Add;
    BI := Item.MultiResBitmap.Add;
    BI.Bitmap.CreateFromStream(Stream);
    Result := Item.Index;
    Stream.Free;
    Free;
  end;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Не советую вам юзать Delphi-ImageList-зоопарк, вот получше пример.

 

 

 

abcdefg.zip

Изменено пользователем egorea1999

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
18 часов назад, egorea1999 сказал:

Не советую вам юзать Delphi-ImageList-зоопарк, вот получше пример.

 

Мне не очень хочется вручную для ListView все это отрисовывать. Я правильно понимаю мысль, что в моем коде проблема с ListView, а не с загрузкой картинки?

Изменено пользователем Alex Bakulin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Мне кажется, у вас не указан scale для загружаемой картинки в MultiResBitmap.

BI.Scale := 1;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вот тут пример загрузки из файла.

Во-первых убедитесь, что MultiResBitmap содержит правильную картинку и размеры. Я бы сначала загрузил во временный TBitmap узнал его параметры (убедился, что он вообще что-то реально содержит) и уже потом присвоил его TCustomBitmapItem.Bitmap.Assign, а потом удалил. Кроме того для масштаба 1 кажется всегда есть картинка. Т.е. сделать надо примерно так:

    BI := Source.MultiResBitmap.ItemByScale(Scale, True, True);
    if BI = nil then
    begin
      BI := Source.MultiResBitmap.Add;
      BI.Scale := Scale;
    end;

Во-вторых вы не тот индекс используете. Надо так:

    NewDestination := ImageList1.Destination.Add;
    NewLayer := NewDestination.Layers.Add;
    NewLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, NewSource.MultiResBitmap.Width,
      NewSource.MultiResBitmap.Height);
    NewLayer.Name := SourceName;
    ControlAction1.ImageIndex := NewDestination.Index;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Думаю, стоит перед загрузкой битмапа из Stream добавить

Stream.Position:=0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вот добавил пример для URL в ту же ветку, коль скоро там велось обстоятельное обсуждение.

Также в ImageListDemo есть пример добавления картинки нарисованной вручную
См. procedure TMainForm.AddSourceToItem(const Index: Integer);

Изменено пользователем RoschinSpb

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
14 часов назад, RoschinSpb сказал:

Вот добавил пример для URL в ту же ветку, коль скоро там велось обстоятельное обсуждение.

Также в ImageListDemo есть пример добавления картинки нарисованной вручную
См. procedure TMainForm.AddSourceToItem(const Index: Integer);

Спасибо. Очень помогло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...