⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataunit.~pas

📁 ilda file player and converter ilda to hex files for delphi 7
💻 ~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 + -