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

Delphi: FireMonkey

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

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

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

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

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

P.S. чем подробнее тем лучше) Может есть что почитать по этому поводу...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2016, 10:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Более рациональный способ загружать картинки android (Delphi FireMonkey):

Вставка картинки в листбокс Delphi XE5 Android - Delphi FireMonkey
Здравствуйте! Ребята подскажите как вставить 2 картинку в итем лист бокса. Одну основную я вставил но по условию нужно вставить в некоторых...

Более рациональный способ - C#
Как можно рациональней изменить код ? using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Более рациональный способ синхронизации потоков - C#
Вот что делаю я, чтобы дождаться выполнения метода, который вызывается неконтролируемоTask tsk = Task.Factory.StartNew(() => { while...

Более рациональный способ удаления папки - C++ Qt
Есть ли более рациональный способ удаления папки(с использованием qt), чем этот(в лоб) #ifdef Q_OS_WIN system("rmdir /s /q...

Рациональный способ работы с массивом - Matlab
Ребят, подскажите по такому вопросу: есть таблица, состоящая из трех столбцов A, B и C, десять строк, нужно вычислить, например, что-то...

Наиболее рациональный способ распределения памяти - Жесткие диски
Есть 2 HDD - 500 и 250 GB и внешний 1 TB. Будет стоять 2 ОС - Ubuntu и Windows 7 (и немного место оставлено для экспериментов с другими...

7
krapotkin
2591 / 2469 / 624
Регистрация: 14.04.2014
Сообщений: 11,947
Записей в блоге: 7
28.10.2016, 12:50 #2
прогрузка изображений - это результат параллельных запросов, есс-но
вы отображаете placeholder и запускаете поток для скачивания картинки
когда поток вернулся, он проеряет, есть ли еще на экране placeholder и загружает туда результат

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

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

Добавлено через 2 минуты
Нашел такой пример. Примерно даже понял, о чём идёт речь, но как загрузить картинку...
0
krapotkin
2591 / 2469 / 624
Регистрация: 14.04.2014
Сообщений: 11,947
Записей в блоге: 7
28.10.2016, 20:39 #6
кэш это не компонент, не класс, это понятие. поэтому я не работал с кэшем в делфи как-то не звучит
как загрузить картинку - тоже вопрос не очень
куда загрузить? а как все остальное у вас устроено?
вы умеете работать с потоками?
вы умеете загружать файлы из интернета?
вы работали с классами типа TDictionary?
вопрос с кэшем тут самый простой из всего.

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

давайте поконкретнее вопрос, чтобы можно быть ответить, но при этом не писать за вас целую программу
0
adidas1997-21
1 / 1 / 0
Регистрация: 05.02.2015
Сообщений: 260
29.10.2016, 08:02  [ТС] #7
Цитата Сообщение от krapotkin Посмотреть сообщение
вы работали с классами типа TDictionary?
Нет.
Цитата Сообщение от krapotkin Посмотреть сообщение
вы умеете работать с потоками?
вы умеете загружать файлы из интернета?
Да.
Цитата Сообщение от krapotkin Посмотреть сообщение
куда загрузить?
Как я понял в кэш, что бы потом проверял есть она или нет.
Цитата Сообщение от krapotkin Посмотреть сообщение
а как все остальное у вас устроено?
Это честно говоря не понял, все остальное.. Раньше я ставил картинки таким образом: скачивал с FTP картинки и просто втыкал их. Но надо же развиваться и новое что-то и более лучшее познавать.
0
krapotkin
2591 / 2469 / 624
Регистрация: 14.04.2014
Сообщений: 11,947
Записей в блоге: 7
29.10.2016, 13:03 #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;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2016, 13:03
Привет! Вот еще темы с ответами:

Рациональный способ быстро получить информацию из файла - C++
Привет всем! Подскажите, как правильно считать информацию из файла в массивы в С++. Задача такая: Надо получить из файла значения и...

Необходим более рациональный и компактный код - JavaScript
Прошу всех кто может помочь помогите. Код который представлен мной ниже рабочий это все что я сам смог - потому как в яваскриптах увы я...

Как в TreeView загружать картинки - C# ASP.NET
Как в TreeView загружать картинки не с локального диска а с URL-a????!?!?!?!?

Как лучше загружать картинки? - C++ Builder
На стадии проектирования возникает такой вопрос: где хранить картинки? Включать в сам проект или хранить в папке программы? Есть ли разница?


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
29.10.2016, 13:03
Ответ Создать тему
Опции темы

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