|
Function GetAsphyreImage(Bmp:TBitmap;Image:TAsphyreImage):integer;
var
Target : TBitmap;
Index : Integer;
ScanIndx: Integer;
LineConv: TLineConvFunc;
AuxMem : Pointer;
MemAddr : Pointer;
MemPitch: Integer;
Point : TPoint;
begin
if Bmp=nil then
begin
Result:=errBitmapLoad;
Exit;
end;
Point.X:=Bmp.Width;
Point.Y:=Bmp.Height;
with Image do
begin
PatternSize:=Point;
PatternCount:=1;
TextureSize:=Point;
TextureCount:=1;
end;
Target:= TBitmap.Create();
try
TileBitmap(Target, Bmp, Image.TextureSize, Image.PatternSize, Image.PatternSize, true,0, 0);
Image.TextureCount:= Ceil(Target.Height / Image.TextureSize.Y);
Result:= Image.Initialize;
if (Result <> errNone) then Exit;
LineConv:= GetLineConv32toX(D3DToFormat(Image.SurfaceFormat));
for Index:= 0 to Image.TextureCount - 1 do
begin
Result:= Image.Lock(Index, MemAddr, MemPitch);
if (Result <> errNone) then Break;
for ScanIndx:= 0 to Image.TextureSize.Y - 1 do
begin
AuxMem:= Target.Scanline[(Index * Image.TextureSize.Y) + ScanIndx];
LineConv(AuxMem, MemAddr, Image.TextureSize.X);
Inc(Integer(MemAddr), MemPitch);
end;
Result:= Image.Unlock(Index);
if (Result <> errNone) then Break;
end;
finally
Target.Free();
end;
end; |
|