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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| procedure TForm1.btnConversionClick(Sender: TObject);
{Création de autant de tables qu'il y a de cartes à traiter}
var
i: Integer;
begin
try
btnConversion.Enabled:= False;
Pos:= 0;
ProgressConv.Position:= 0;
for i:= 0 to Dalles.Count-1 do
begin
FchConv.Caption:= Dalles[i]+' ('+IntToStr(i+1)+'/'+IntToStr(Dalles.Count)+')';
Application.ProcessMessages;
CreeCarte(Dalles[i]);
end;
finally
btnDalles.Enabled:= True;
btnCartes.Enabled:= False;
FchConv.Caption:= 'Conversion terminée';
end;
end;
procedure TForm1.CreeCarte(Dl: String);
{Création de la table relative à une carte}
var
NomCarte: String;
PictSrc: TPicture;
PictDst: TPicture;
xDl, yDl, dX, dY: Integer;
i, j, nX, nY, z: Integer;
Flux: TMemoryStream;
begin
NomCarte:= Copy(Dl, 1, 12);
CreateDir(DirDst+NomCarte);
SetCurrentDir(DirDst+NomCarte);
SQLite3Connection.DatabaseName:= 'OruxMapsImages.db';
SQLite3Connection.Open;
SQLTransaction.Active:= True;
SQLite3Connection.ExecuteDirect('CREATE TABLE android_metadata( locale TEXT);');
SQLite3Connection.ExecuteDirect('INSERT INTO android_metadata VALUES (''fr_FR'')');
SQLite3Connection.ExecuteDirect('CREATE TABLE tiles ('+
'x int, y int, z int, image blob, PRIMARY KEY (x,y,z));');
SQLite3Connection.ExecuteDirect('CREATE INDEX IND on tiles (x,y,z)');
SQLTransaction.Commit;
PictSrc:= TPicture.Create;
PictSrc.LoadFromFile(DirSrc+Dl);
xDl:= PictSrc.Bitmap.Width;
yDl:= PictSrc.Bitmap.Height;
nX:= xDl div 512;
if xDl mod 512 <> 0 then
Inc(nX);
nY:= yDl div 512;
if yDl mod 512 <> 0 then
Inc(nY);
z:= 16;
for j:= 0 to nY-1 do
for i:= 0 to nX-1 do
try
Flux := TMemoryStream.Create;
PictDst:= TPicture.Create;
PictDst.BitMap.Width:= 512;
PictDst.BitMap.Height:= 512;
PictDst.BitMap.Canvas.CopyRect(Rect(0, 0, 512, 512), PictSrc.Bitmap.Canvas, Rect(512*i, 512*j, 512+512*i, 512+512*j));
PictDst.BitMap.Canvas.Brush.Style:= bsSolid;
PictDst.BitMap.Canvas.Brush.Color:= $F2D3CA;
dX:= 511+512*i-xDl;
if dX > 0 then
PictDst.BitMap.Canvas.FillRect(511-dX, 0, 512, 512);
dY:= 511+512*j-yDl;
if dY > 0 then
PictDst.BitMap.Canvas.FillRect(0, 511-dY, 512, 512);
PictDst.Jpeg.CompressionQuality:= 85;
PictDst.SaveToStream(Flux);
PictDst.Free;
Flux.Position := 0;
SQLQuery.SQL.Text:= 'INSERT INTO tiles (x, y, z, image) VALUES ('+IntToStr(i)+','+IntToStr(j)+','+IntToStr(z)+', :image)';
SQLQuery.Params.ParamByName('image').LoadFromStream(Flux, ftBlob);
SQLQuery.ExecSQL;
SQLTransaction.Commit;
IncPos:= 1000/(Dalles.Count*nX*nY);
Pos:= Pos+IncPos;
ProgressConv.Position:= Round(Pos);
finally
Flux.Free;
end;
PictSrc.Free;
SQLite3Connection.Close;
EnrgFchCoord(Dl, IntToStr(z), xDl, yDl, nX, nY); //enregistrement du fichier XML descriptif
end; |
Partager