Форум программистов, компьютерный форум CyberForum.ru

Delphi: FireMonkey

Войти
Регистрация
Восстановить пароль
 
adidas1997-21
1 / 1 / 0
Регистрация: 05.02.2015
Сообщений: 250
#1

Более рациональный способ загружать картинки android - Delphi FireMonkey

28.10.2016, 10:29. Просмотров 299. Ответов 7
Метки нет (Все метки)

Каким образом лучше загружать картинки? (меньше затрат времени, меньше занимаемого места и не так что бы скачивать в какую-то папку на телефоне, которая позволяет в галерее потом найти эту фотографию)

Добавлено через 5 минут
Как реализовывают прогрузку изображения (пока листаешь вниз картинки грузятся при тебе)? Откуда это берут?

P.S. чем подробнее тем лучше) Может есть что почитать по этому поводу...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2016, 10:29     Более рациональный способ загружать картинки android
Посмотрите здесь:
Delphi FireMonkey Вставка картинки в листбокс Delphi XE5 Android
Delphi FireMonkey Создание дерева TreeView [программный способ]
C# Более рациональный способ
Более рациональный способ синхронизации потоков C#
Более рациональный способ удаления папки C++ Qt
Matlab Рациональный способ работы с массивом
Наиболее рациональный способ распределения памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
krapotkin
2340 / 2241 / 575
Регистрация: 14.04.2014
Сообщений: 10,773
28.10.2016, 12:50     Более рациональный способ загружать картинки android #2
прогрузка изображений - это результат параллельных запросов, есс-но
вы отображаете placeholder и запускаете поток для скачивания картинки
когда поток вернулся, он проеряет, есть ли еще на экране placeholder и загружает туда результат

по поводу бесконечных прокруток вот сслыка например
https://developers.google.com/web/up...scroller?hl=en
adidas1997-21
1 / 1 / 0
Регистрация: 05.02.2015
Сообщений: 250
28.10.2016, 14:23  [ТС]     Более рациональный способ загружать картинки android #3
Цитата Сообщение от krapotkin Посмотреть сообщение
запускаете поток для скачивания картинки
Получается он постоянно будет скачивать? Можно ли как то реализовать, что бы картинки уже были (в ресурсы и т.д. не получится, т.к. картинки могут изменяться, загружаться новые и т.д.). Которых нет, скачать, которые есть использовать, но и при условии что бы эти картинки не скачивать папкой на флешку, куда прямой доступ каждый иметь будет.
Постоянное скачивание, это постоянный надрыв интернет трафика. А это плохо...

Добавлено через 2 минуты
Можно ли в этом случае использовать кэш? Если да, то вообще как для андроида это реализуется?
krapotkin
2340 / 2241 / 575
Регистрация: 14.04.2014
Сообщений: 10,773
28.10.2016, 17:15     Более рациональный способ загружать картинки android #4
можно
делаем некий массив (точнее, список, еще точнее TDictionary-ассоциативный список ) и называем его кэш
основная программа делает запускает поток - запрос на получение картинки
поток смотрит сначала в кэш, если там нашел, отдает и завершается
если не нашел, скачивает, помещает в кэш, отдает и завершается
adidas1997-21
1 / 1 / 0
Регистрация: 05.02.2015
Сообщений: 250
28.10.2016, 17:43  [ТС]     Более рациональный способ загружать картинки android #5
Это очень хорошее действие, но если ни разу ещё не работал в делфи с кэшем, не понятно с чего и как начинать. Есть ли мануал какой-нибудь, типо примера с разбором?

Добавлено через 2 минуты
Нашел такой пример. Примерно даже понял, о чём идёт речь, но как загрузить картинку...
krapotkin
2340 / 2241 / 575
Регистрация: 14.04.2014
Сообщений: 10,773
28.10.2016, 20:39     Более рациональный способ загружать картинки android #6
кэш это не компонент, не класс, это понятие. поэтому я не работал с кэшем в делфи как-то не звучит
как загрузить картинку - тоже вопрос не очень
куда загрузить? а как все остальное у вас устроено?
вы умеете работать с потоками?
вы умеете загружать файлы из интернета?
вы работали с классами типа TDictionary?
вопрос с кэшем тут самый простой из всего.

тут каждый из вопросов тянет строк на 50
а в сумме будет нормальная такая статья

давайте поконкретнее вопрос, чтобы можно быть ответить, но при этом не писать за вас целую программу
adidas1997-21
1 / 1 / 0
Регистрация: 05.02.2015
Сообщений: 250
29.10.2016, 08:02  [ТС]     Более рациональный способ загружать картинки android #7
Цитата Сообщение от krapotkin Посмотреть сообщение
вы работали с классами типа TDictionary?
Нет.
Цитата Сообщение от krapotkin Посмотреть сообщение
вы умеете работать с потоками?
вы умеете загружать файлы из интернета?
Да.
Цитата Сообщение от krapotkin Посмотреть сообщение
куда загрузить?
Как я понял в кэш, что бы потом проверял есть она или нет.
Цитата Сообщение от krapotkin Посмотреть сообщение
а как все остальное у вас устроено?
Это честно говоря не понял, все остальное.. Раньше я ставил картинки таким образом: скачивал с FTP картинки и просто втыкал их. Но надо же развиваться и новое что-то и более лучшее познавать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2016, 13:03     Более рациональный способ загружать картинки android
Еще ссылки по теме:
Рациональный способ быстро получить информацию из файла C++
Необходим более рациональный и компактный код JavaScript
Как лучше загружать картинки? C++ Builder
Как в TreeView загружать картинки C# ASP.NET
PHP Возможно ли загружать картинки удалённо?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
krapotkin
2340 / 2241 / 575
Регистрация: 14.04.2014
Сообщений: 10,773
29.10.2016, 13:03     Более рациональный способ загружать картинки android #8
все остальное - это то что из первого поста
Цитата Сообщение от adidas1997-21 Посмотреть сообщение
пока листаешь вниз
откуда знать, что вы там листаете? и как туда вставлять картинки

ftp лучше заменить на http. это мое сугубо личное мнение. оно попроще просто

вот общая схема. есть кэш, мы ему говорим - дай имидж, как придет вызовешь вот эту процедуру
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TForm1=class(TForm)
...
  Cch:TCache;
end;
 
procedure Tform1.ImageReceived(Sender:TObject);
var  m:TMemoryStream absolute Sender;
begin
  // вот тут в m - скачанная картинка, делайте с ней что угодно
end;
 
...
cch:=TCache.Create;
cch.getImage(URL,ImageReceived);

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
TLoader=class(TThread)
  st:TMemoryStream;
  bmp:TBitmap;
  path:string;
  result : integer;
  procedure Execute; override;
  constructor Create(const apath:string; AOnTerminate:TNotifyEvent); reintroduce;
  destructor Destroy; override;
end;
 
TCache=class(TDictionary<string,TMemoryStream>)
  FOnImageReceived:TNotifyEvent;
  procedure ThreadEnds(Sender:TObject);
  procedure GetImage(const apath:srting; AImageReceived:TNotifyEvent);
end;
...
constructor TLoader.Create(const apath:string; AOnTerminate:TNotifyEvent); 
begin
  inherited Create(true);
  FreeOnTerminate:=true;
  OnTerminate := AOnTerminate;
  path:=APath;
  st:=TMemoryStream.Create;
end;
 
destructor TLoader.Destroy; override;
begin
  st.free;
end;
 
procedure TLoader.Execute;
var h:THTTPClient;
  resp:IHTTPResponse;
begin
  resp:=h.get(path, st);
  // тут должны быть проверки ошибок...
  result := true;  
end;
 
procedure TCache.GetImage(const apath:srting; AImageReceived:TNotifyEvent);
var L:TLoader;
begin
  FOnImageReceived:=AImageReceived;
  if containsKey(apath)
     FOnImageReceived(items[apath])
  else
  begin
    L:=TLoader.Create(APath, ThreadEnds);
    L.Start;
  end;
end;
 
procedure TCache.ThreadEnds(Sender:TObject);
var T:TLoader absolute Sender;
begin
  if T.Result then
    FOnImageReceived(st);
end;
Yandex
Объявления
29.10.2016, 13:03     Более рациональный способ загружать картинки android
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru