泛型,存放N张图片
(* *************************************************
1、里面放多张图片,用文件名作为索引
2、线程在背后从硬盘加载到内存
3、批量加载
4、加载完成后执行回调,回调是线程安全的
5、回调中的参数是新加载了多少张图片
************************************************** *)
unit BitmapList; interface uses
ystem.SysUtils, System.Classes, FMX.Graphics, Generics.Collections,
xSuperObject, xSuperJson, UrlMon, IdURI, DateUtils; type
TBitmapList = class(TDictionary<string, TBitmap>)
private public
RPath, LPath: string; // url路径,本地路径
function CreateDirPath(url: string): string; // 生成路径
function GetSubDateTime(S1, S2: string): string; // 获取两个时间间隔
procedure LoadFromFiles(s: string; callback: TProc < Integer >= nil); overload; // 加载一个或逗号分隔的多个图片文件名
procedure LoadFromFiles(ss: TStrings; callback: TProc < Integer >= nil);overload; // TStrings 的多个图片文件名
procedure LoadFromFiles(ja: ISuperArray; callback: TProc < Integer >= nil); overload; // jo 的多个图片文件名
procedure LoadFromFiles(ja: ISuperArray; k: string; callback: TProc < Integer >= nil); overload; // ja.O[i].S[K]的多个图片文件名 ja里的某个值
end;
implementation
uses UnitLog;
{ TBitmapList }
procedure TBitmapList.LoadFromFiles(s: string; callback: TProc<Integer>);
var
temp1, temp2: string;
i, j: Integer;
begin
TThread.CreateAnonymousThread(
procedure
var
i, n: Integer;
t, t1: string;
o: TBitmap;
a: TArray<string>;
begin
n := 0;
a := s.Split([',']);
for i := 0 to length(a) - 1 do
begin
t := a[i];
if (t <> '') and (not ContainsKey(t)) then
begin
if (not FileExists(t)) and (RPath <> '') then
begin
t1 := t.Replace(RPath, LPath).Replace('/', '\'); // 本地路径
if (UrlDownloadToFile(nil, PChar(TIdURI.URLEncode(t)), PChar(t1), 0, nil) = 0) then
t := t1
else
t := '';
end;
if (t <> '') and (ContainsKey(t) = False) then
begin
o := TBitmap.Create;
o.LoadFromFile(t);
Add(t, o);
Inc(n);
end;
end;
end; if (Assigned(callback)) then
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
callback(n);
end);
end).Start;
end; procedure TBitmapList.LoadFromFiles(ss: TStrings; callback: TProc<Integer>);
var
s: string;
i: Integer;
begin
for i := 0 to ss.Count - 1 do
begin
s := ss[i];
LoadFromFiles(s, callback);
end;
end; procedure TBitmapList.LoadFromFiles(ja: ISuperArray; k: string;
callback: TProc<Integer>);
var
s: String;
x: IMember;
i: Integer;
begin
s := '';
for x in ja do
s := s + x.AsObject.s[k] + ',';
s := s.TrimRight([',']);
LoadFromFiles(s, callback);
end; procedure TBitmapList.LoadFromFiles(ja: ISuperArray; callback: TProc<Integer>);
var
s: string;
x: IMember;
begin
s := '';
for x in ja do
s := x.AsString;
LoadFromFiles(s, callback);
end;
泛型,存放N张图片的更多相关文章
- Android Bitmap 全面解析(二)加载多张图片的缓存处理
一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~ ...
- ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- SQLite剖析之编程接口详解
前言 使用过程根据函数大致分为如下几个过程: sqlite3_open() sqlite3_prepare() sqlite3_step() sqlite3_column() sqlite3_fina ...
- Windows Store App JavaScript 开发:简单对象绑定
简单对象绑定是一种基本的绑定类型,可以实现将一个对象中的数据绑定到HTML元素的属性.下面通过一个示例来演示如何使用HTML5和JavaScript开发一个实现简单对象绑定的Windows应用商店应用 ...
- 网页FLASH幻灯片播放带链接源代码 pixviewer.swf使用(转)
<script type="text/javascript"> <!-- var focus_width=360 var focus_height=270 ...
- 轻量级开源内存数据库SQLite性能测试
[IT168 专稿]SQLite是一款轻型的数据库,它占用资源非常的低,同时能够跟很多程序语言相结合,但是支持的SQL语句不会逊色于其他开源数据库.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品 ...
- SQLiteAPI函数详解
使用的过程根据使用的函数大致分为如下几个过程: sqlite3_open() sqlite3_prepare() sqlite3_step() sqlite3_column() sqlite3_fin ...
- sqlite3使用简介(内含解决sqlite内存的方法)
一.使用流程 要使用sqlite,需要从sqlite官网下载到三个文件,分别为sqlite3.lib,sqlite3.dll,sqlite3.h,然后再在自己的工程中配置好头文件和库文件,同时将dll ...
- UI:页面传值、单例模式传值、属性传值、NSUserDefaults 数据持久化
<单页面传值> 页面传值,从前向后传值,使用属性,在后一个页面定义属性,在前一个页面,用点语法,获得值,在适当的时候传值 页面传值,从后向前面传值,使用协议和代理,在后一个页面指定协议,定 ...
随机推荐
- 本机搭建外网web服务器
版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 首先声明一下楼主是个开发人员,按理说这些搭建服务器什么的,和楼主半毛钱的关系都没有.但是呢,楼主是个爱学习的人,懂得德智体全面 ...
- php 连接mongodb 增查改删操作
查询 <?php $m=new MongoClient('mongodb://admin:admin@localhost:27017/admin'); $db=$m->hndb; $cc= ...
- 关于网站高性能中磁盘cpu以及内存对网站性能的影响
之前和同事聊天的时候,提到了这个硬件方面(包括内存,cpu,以及硬盘的存储选择),个人认为可以从这几个方面来提高底层硬件的性能,从而提高网站的整体吞吐量和速度. 一.主机: (1).CPU:决定处理的 ...
- 错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法
错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法 java.lang.UnsupportedClassVersionError: org/ap ...
- JAVA如何获取GUID
UUID.randomUUID().toString().toUpperCase().replaceAll("-", "")
- nginx 设置反响代理实现nginx集群
ginx.conf: worker_processes 1; events { worker_connections 1024; } http { include mime.types ...
- nginx反向代理编译异常
cc1: warnings being treated as errors /root/nginx_tcp_proxy_module/ngx_tcp.c: 在函数‘ngx_tcp_add_addrs’ ...
- 前端---HTML
HTML基础 本章内容: 简介 HTML定义 标签定义和属性 HTML5基本结构 HTML5字符集 <head>标签 <title> <base/> <lin ...
- [转]Linux vi 编辑后如何保存
比如:vi /etc/vsftpd/vsftpd.conf 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推 ...
- win32api 获取文件版本信息
#coding:utf-8 myPath="C:\\ime" import os from win32api import GetFileVersionInfo, LOWORD, ...