📄 dataunit.~pas
字号:
unit DataUnit;
interface
uses Windows;
type
TOutXY=record
X,Y:Short;
End;
TTransfer=array[0..1] of byte;
TMyColor=Record
R,G,B:Byte;
End;
TIldaPoints=Record
X,Y,Z:short;
Status:Word;
End;
TIlda3DPoints=Record
X,Y:short ;
Status:Word;
End;
TDevicePoints=Record
X,Y:Short;
Color:TMyColor;
I:Byte;
End;
TMyPoints=Record
X,Y:Short;
Color:Byte;
I:Byte;
End;
PMyFrame=^TMyFrame;
TMyFrame=Record
CountPoints:Word;
Points:array of TMyPoints;
End;
TMyShow=Record
CountFrame:LongWord;
CountPoints:LongWord;
Frames:array of PMyFrame;
End;
const HidePoint:TMyColor=(R:0;G:0;B:0);
Function ReadIldaFile (FileName:String):Boolean;
Function ReadColorPallette (FileName:String):Boolean;
Procedure Transfer3DToMyOwnFormat (SizeOfFrame:Integer);
Procedure TransferToMyOwnFormat (SizeOfFrame:Integer);
{const IldaColorTable:array [0..6,0..2] of Byte=
((0,0,255),
(0,255,0),
(255,0,0),
(255,0,255),
(255,255,0),
(0,255,255),
(255,255,255));}
Var
Data:array of TIldaPoints;
Logo:TMyShow;
Load:TMyShow;
Data1:array of TIlda3DPoints;
MyShow:TMyShow;
SpeedP:Word;
Min_SpeedP,
Max_SpeedP:Integer;
IldaColorTable:array [0..255,0..2] of Byte;
ScaleX,ScaleY:Single;
ShiftX,ShiftY:Integer;
Mirr_X,Mirr_Y:Integer;
Show_points_frame:Boolean;
DelayColor:Byte;
ShowFileName:String;
PalleteTxt:String;
RotationFrame:Integer;
Shift_X,Shift_Y:Integer;
TransShift_X,TransShift_Y:Integer;
SumAixX :array[0..4095] of single;
SumAixY :array[0..4095] of single;
MultAixX:array[0..4095] of single;
MultAixY:array[0..4095] of single;
PosAixX :array[0..4095] of single;
PosAixY :array[0..4095] of single;
KeyStone_X,KeyStone_Y:Single;
OutPutSource:Byte;
FramesPerSecond:Short;
ShowSettings:Boolean;
implementation
uses Sysutils,unit1;
Function ReadColorPallette (FileName:String):Boolean;
Var F:File;
i:byte;
M:Byte;
Begin
Result:=False;
if FileExists(FileName) Then
Begin
Result:=True;
try
AssignFile(F,FileName);
reset(F,1);
For i:=0 to 255 do
Begin
BlockRead(f,IldaColorTable[i,0],1);
BlockRead(f,IldaColorTable[i,1],1);
BlockRead(f,IldaColorTable[i,2],1);
BlockRead(f,m,1);
{ form1.memo1.Lines.Add(
' R='+inttostr(IldaColorTable[i,0])+
' G='+inttostr(IldaColorTable[i,1])+
' B='+inttostr(IldaColorTable[i,2]));
} End;
CloseFile(f);
except
Result:=False;
End
End;
End;
Procedure TransferToMyOwnFormat (SizeOfFrame:Integer);
Var
aa:integer;
ccr:integer;
IndexOfKadr:Integer;
Prom:PMyFrame;
stringus:string;
i,aaa:Integer;
GraphPresent:Boolean;
str,s,f:string;
fi:textfile;
Begin
getdir(0,f);
f:=f+'\file.inc';
assignfile(fi,f);
IndexOfKadr:=MyShow.CountFrame;
MyShow.CountFrame:=MyShow.CountFrame+1;
MyShow.CountPoints:=MyShow.CountPoints+SizeOfFrame;
SetLength(MyShow.Frames,MyShow.CountFrame);
New(Prom);
MyShow.Frames[IndexOfKadr]:=Prom;
MyShow.Frames[IndexOfKadr].CountPoints:=SizeOfFrame;
SetLength(MyShow.Frames[IndexOfKadr].Points,SizeOfFrame);
if IndexOfKadr<3 Then GraphPresent:=True;
if (indexofkadr=0) then
begin
// sizeOfKadr:=0;
// contorpagini:=0;
if (fileexists(ExtractFileName(f))) then
begin
deletefile(f);
rewrite(fi);
end
else rewrite(fi)
end
else append(fi);
ccr:=0;
For i:=0 To SizeOfFrame-1 do
Begin
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].X)[0]:=TTransfer(Data[i].X)[1];
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].X)[1]:=TTransfer(Data[i].X)[0];
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].Y)[0]:=TTransfer(Data[i].Y)[1];
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].Y)[1]:=TTransfer(Data[i].Y)[0];
if ((TTransfer(Data[i].Status)[0] shr 6) and 1)=1 Then
Begin
MyShow.Frames[IndexOfKadr].Points[i].I:=0;
End
Else
Begin
MyShow.Frames[IndexOfKadr].Points[i].I:=255;
End;
if MyShow.Frames[IndexOfKadr].Points[i].X>0 Then MyShow.Frames[IndexOfKadr].Points[i].X:=((MyShow.Frames[IndexOfKadr].Points[i].X shr 4) and $7FF)+2048
Else MyShow.Frames[IndexOfKadr].Points[i].X:=2048-((Abs(MyShow.Frames[IndexOfKadr].Points[i].X) shr 4) and $7FF);
if MyShow.Frames[IndexOfKadr].Points[i].Y>0 Then MyShow.Frames[IndexOfKadr].Points[i].Y:=4096-(((MyShow.Frames[IndexOfKadr].Points[i].Y shr 4) and $7FF)+2048)
Else MyShow.Frames[IndexOfKadr].Points[i].Y:=4096-(2048-((Abs(MyShow.Frames[IndexOfKadr].Points[i].Y) shr 4) and $7FF));
MyShow.Frames[IndexOfKadr].Points[i].Color:=TTransfer(Data[i].Status)[1];
ccr:=ccr+1;
if i=0 then
begin
aaa:=sizeofframe*6;
write(fi,'.dw ');
write(fi,inttostr(aaa)+',')
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+#13+'.dw ';
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+inttostr(aaa)+',';
end;
if ccr=60 then
begin
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+#13;
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+'.dw ';
writeln(fi,'');
write(fi,'.dw ');
ccr:=0;
end;
if ccr=59 then
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+
stringus:=(inttostr(MyShow.Frames[IndexOfKadr].Points[i].x)+','
+inttostr(MyShow.Frames[IndexOfKadr].Points[i].y)+','
+inttostr(round(MyShow.Frames[Indexofkadr].Points[i].I/255)))
else if i<>sizeofframe-1 then
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+
stringus:=(inttostr(MyShow.Frames[IndexOfKadr].Points[i].x)+','
+inttostr(MyShow.Frames[IndexOfKadr].Points[i].y)+','
+inttostr(round(MyShow.Frames[Indexofkadr].Points[i].I/255))+',')
else
// form1.Memo1.lines.Text:=form1.Memo1.lines.Text+
stringus:=(inttostr(MyShow.Frames[IndexOfKadr].Points[i].x)+','
+inttostr(MyShow.Frames[IndexOfKadr].Points[i].y)+','
+inttostr(round(MyShow.Frames[Indexofkadr].Points[i].I/255)));
write(fi,stringus);
End;
closefile(fi);
End;
Procedure Transfer3DToMyOwnFormat (SizeOfFrame:Integer);
Var
ccr:integer;
IndexOfKadr:Integer;
Prom:PMyFrame;
i:Integer;
GraphPresent:Boolean;
Begin
IndexOfKadr:=MyShow.CountFrame;
MyShow.CountFrame:=MyShow.CountFrame+1;
MyShow.CountPoints:=MyShow.CountPoints+SizeOfFrame;
SetLength(MyShow.Frames,MyShow.CountFrame);
New(Prom);
MyShow.Frames[IndexOfKadr]:=Prom;
MyShow.Frames[IndexOfKadr].CountPoints:=SizeOfFrame;
SetLength(MyShow.Frames[IndexOfKadr].Points,SizeOfFrame);
if IndexOfKadr<3 Then GraphPresent:=True;
ccr:=0;
For i:=0 To SizeOfFrame-1 do
Begin
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].X)[0]:=TTransfer(Data1[i].X)[1];
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].X)[1]:=TTransfer(Data1[i].X)[0];
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].Y)[0]:=TTransfer(Data1[i].Y)[1];
TTransfer(MyShow.Frames[IndexOfKadr].Points[i].Y)[1]:=TTransfer(Data1[i].Y)[0];
if ((TTransfer(Data1[i].Status)[0] shr 6) and 1)=1 Then
Begin
MyShow.Frames[IndexOfKadr].Points[i].I:=0;
End
Else
Begin
MyShow.Frames[IndexOfKadr].Points[i].I:=255;
End;
if MyShow.Frames[IndexOfKadr].Points[i].X>0 Then MyShow.Frames[IndexOfKadr].Points[i].X:=((MyShow.Frames[IndexOfKadr].Points[i].X shr 4) and $7FF)+2048
Else MyShow.Frames[IndexOfKadr].Points[i].X:=2048-((Abs(MyShow.Frames[IndexOfKadr].Points[i].X) shr 4) and $7FF);
if MyShow.Frames[IndexOfKadr].Points[i].Y>0 Then MyShow.Frames[IndexOfKadr].Points[i].Y:=4096-(((MyShow.Frames[IndexOfKadr].Points[i].Y shr 4) and $7FF)+2048)
Else MyShow.Frames[IndexOfKadr].Points[i].Y:=4096-(2048-((Abs(MyShow.Frames[IndexOfKadr].Points[i].Y) shr 4) and $7FF));
MyShow.Frames[IndexOfKadr].Points[i].Color:=TTransfer(Data1[i].Status)[1];
ccr:=ccr+1;
if ccr=60 then
begin
form1.Memo1.lines.Text:=form1.Memo1.lines.Text+#13;
ccr:=0;
end;
form1.Memo1.lines.Text:=form1.Memo1.lines.Text+
(inttostr(MyShow.Frames[IndexOfKadr].Points[i].x)+','
+inttostr(MyShow.Frames[IndexOfKadr].Points[i].y)+','
+inttostr(round(MyShow.Frames[Indexofkadr].Points[i].I/255))+',');
End;
End;
Function ReadIldaFile (FileName:String):Boolean;
Var
f:File;
Ild:array[0..3] of char;
Btt:Byte;
Btt1:array [0..1] of Byte;
Wrd:Word;
D3_D2:Integer;
FrameName:array[0..7] of char;
CompanyName:Array[0..7] of char;
i:integer;
NPoints:Word;
Eee:Integer;
begin
Result:=False;
MyShow.CountPoints:=0;
AssignFile(F,Filename);
FileMode := 0;
Reset(F,1);
Repeat
BlockRead(f,Ild,4);
if Ild='ILDA' Then
Begin
BlockRead(f,D3_D2,3);
BlockRead(f,D3_D2,1);
if (D3_D2 and $FF)=0 Then
Begin
BlockRead(f,FrameName,8);
BlockRead(f,CompanyName,8);
BlockRead(f,Btt1,2);
TTransfer(NPoints)[0]:=Btt1[1];
TTransfer(NPoints)[1]:=Btt1[0];
if NPoints=0 Then Break;
BlockRead(f,Btt1,2);
BlockRead(f,Btt1,2);
BlockRead(f,Btt1,2);
SetLength(Data,NPoints);
BlockRead(F,Data[0],NPoints*8,Eee);
if Eee<>(NPoints*8) Then Break;
TransferToMyOwnFormat (NPoints);
End
Else
Begin
BlockRead(f,FrameName,8);
BlockRead(f,CompanyName,8);
BlockRead(f,Btt1,2);
TTransfer(NPoints)[0]:=Btt1[1];
TTransfer(NPoints)[1]:=Btt1[0];
if NPoints=0 Then Break;
BlockRead(f,Btt1,2);
BlockRead(f,Btt1,2);
BlockRead(f,Btt1,2);
SetLength(Data1,NPoints);
BlockRead(F,Data1[0],NPoints*6,Eee);
if Eee<>(NPoints*6) Then Break;
Transfer3DToMyOwnFormat (NPoints);
End;
End
Else Seek(F,FilePos(F)-3);
until Eof(F);
CloseFile(F);
ShowFileName:=ExtractFileName(FileName);
Result:=True;
End;
Procedure TransferLogoToMyOwnFormat (SizeOfFrame:Integer);
Var
IndexOfKadr:Integer;
Prom:PMyFrame;
i:Integer;
GraphPresent:Boolean;
Begin
IndexOfKadr:=Logo.CountFrame;
Logo.CountFrame:=Logo.CountFrame+1;
Logo.CountPoints:=Logo.CountPoints+SizeOfFrame;
SetLength(Logo.Frames,Logo.CountFrame);
New(Prom);
Logo.Frames[IndexOfKadr]:=Prom;
Logo.Frames[IndexOfKadr].CountPoints:=SizeOfFrame;
SetLength(Logo.Frames[IndexOfKadr].Points,SizeOfFrame);
if IndexOfKadr<3 Then GraphPresent:=True;
For i:=0 To SizeOfFrame-1 do
Begin
TTransfer(Logo.Frames[IndexOfKadr].Points[i].X)[0]:=TTransfer(Data[i].X)[1];
TTransfer(Logo.Frames[IndexOfKadr].Points[i].X)[1]:=TTransfer(Data[i].X)[0];
TTransfer(Logo.Frames[IndexOfKadr].Points[i].Y)[0]:=TTransfer(Data[i].Y)[1];
TTransfer(Logo.Frames[IndexOfKadr].Points[i].Y)[1]:=TTransfer(Data[i].Y)[0];
if ((TTransfer(Data[i].Status)[0] shr 6) and 1)=1 Then
Begin
Logo.Frames[IndexOfKadr].Points[i].I:=0;
End
Else
Begin
Logo.Frames[IndexOfKadr].Points[i].I:=255;
End;
if Logo.Frames[IndexOfKadr].Points[i].X>0 Then Logo.Frames[IndexOfKadr].Points[i].X:=((Logo.Frames[IndexOfKadr].Points[i].X shr 4) and $7FF)+2048
Else Logo.Frames[IndexOfKadr].Points[i].X:=2048-((Abs(Logo.Frames[IndexOfKadr].Points[i].X) shr 4) and $7FF);
if Logo.Frames[IndexOfKadr].Points[i].Y>0 Then Logo.Frames[IndexOfKadr].Points[i].Y:=4096-(((Logo.Frames[IndexOfKadr].Points[i].Y shr 4) and $7FF)+2048)
Else Logo.Frames[IndexOfKadr].Points[i].Y:=4096-(2048-((Abs(Logo.Frames[IndexOfKadr].Points[i].Y) shr 4) and $7FF));
Logo.Frames[IndexOfKadr].Points[i].Color:=TTransfer(Data[i].Status)[1];
End;
End;
var
i{,j}:integer;
Begin
SpeedP:=$60;
MyShow.CountFrame:=0;
ScaleX:=1;
ScaleY:=1;
ShiftX:=0;
ShiftY:=0;
Mirr_X:=0;
Mirr_Y:=0;
Min_SpeedP:=510;
Max_SpeedP:=200000;
Show_points_frame:=False;
DelayColor:=0;
MyShow.CountPoints:=0;
RotationFrame:=0;
Shift_X:=0;
Shift_Y:=0;
TransShift_X:=0;
TransShift_Y:=0;
For i:=0 to 4095 do
Begin
{for j:=0 to 4095 do
Begin
SourseCalculate[i,j].X:=j;
SourseCalculate[i,j].Y:=i;
End; }
MultAixX[i]:=0;
MultAixY[i]:=1;
SumAixX[i] :=0;
SumAixY[i] :=0;
PosAixX[i] :=i;
PosAixY[i] :=i;
OutPutSource:=0;
End;
FramesPerSecond:=10;
ShowSettings:=False;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -