29 |
|
implementation |
30 |
|
|
31 |
|
uses |
32 |
< |
Template, ConnectionManager, Access_OniArchive, Classes, SysUtils; |
32 |
> |
Template, ConnectionManager, Access_OniArchive, Classes, SysUtils, Math; |
33 |
|
|
34 |
|
|
35 |
|
function AGDB(ConnectionID, FileID: Integer): TRawDataList; |
312 |
|
storetype: Byte; |
313 |
|
datasize: Integer; |
314 |
|
mipmap: Byte; |
315 |
< |
bpp: Byte; |
316 |
< |
minside: Byte; |
315 |
> |
|
316 |
> |
function GetImgSize(w,h, storetype: Integer): Integer; |
317 |
> |
begin |
318 |
> |
case storetype of |
319 |
> |
0, 1, 2: |
320 |
> |
Result := w*h*2; |
321 |
> |
8: |
322 |
> |
Result := w*h*4; |
323 |
> |
9: |
324 |
> |
Result := Max(1, w div 4) * Max(1, h div 4) * 8; |
325 |
> |
else |
326 |
> |
Result := -1; |
327 |
> |
end; |
328 |
> |
end; |
329 |
> |
|
330 |
|
begin |
331 |
|
ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(mipmap), @mipmap); |
332 |
|
ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $8C, SizeOf(x), @x); |
336 |
|
ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $A0, 4, @link_mac); |
337 |
|
|
338 |
|
|
339 |
< |
minside := 1; |
327 |
< |
case storetype of |
328 |
< |
0, 1, 2: |
329 |
< |
bpp := 16; |
330 |
< |
8: |
331 |
< |
bpp := 32; |
332 |
< |
9: |
333 |
< |
begin |
334 |
< |
bpp := 4; |
335 |
< |
minside := 4; |
336 |
< |
end; |
337 |
< |
end; |
338 |
< |
|
339 |
< |
datasize := (x * y * bpp) div 8; |
339 |
> |
datasize := GetImgSize(x, y, storetype); |
340 |
|
if (mipmap and $01) > 0 then |
341 |
|
begin |
342 |
|
repeat |
343 |
< |
x := x div 2; |
344 |
< |
y := y div 2; |
345 |
< |
datasize := datasize + (x * y * bpp) div 8; |
346 |
< |
until (x = minside) or (y = minside); |
347 |
< |
if storetype = 9 then |
348 |
< |
begin |
349 |
< |
repeat |
350 |
< |
x := x div 2; |
351 |
< |
y := y div 2; |
352 |
< |
datasize := datasize + (x * y * 16) div 8; |
353 |
< |
until (x = 1) or (y = 1); |
354 |
< |
end; |
343 |
> |
x := Max(x div 2, 1); |
344 |
> |
y := Max(y div 2, 1); |
345 |
> |
datasize := datasize + GetImgSize(x, y, storetype); |
346 |
> |
until (x = 1) and (y = 1); |
347 |
|
end; |
348 |
|
|
349 |
|
SetLength(Result, 1); |