码迷,mamicode.com
首页 > 其他好文 > 详细

泛型,存放N张图片

时间:2015-11-19 10:58:52      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

(* *************************************************
	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张图片

标签:

原文地址:http://www.cnblogs.com/studypanp/p/4976650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!