Code:
function [f,type,endbyte,more]=ildopen(file,startbyte)
%opens ilda file and reads frame starting at startbyte (second parameter 0 indexed)
%returns a matrix [x y colorindex blanked]
%
fid=fopen(file,'r','b');
fseek(fid,7+startbyte,-1);
type=fread(fid,1,'char');
switch type
case {0} %ignore z data for now
fseek(fid,16,0);
size=fread(fid,1,'ushort');
if size ~= 0
fseek(fid,6,0);
frameloc=ftell(fid);
x=fread(fid,size,'short',6);
fseek(fid,frameloc+2,-1);
y=fread(fid,size,'short',6);
fseek(fid,frameloc+6,-1);
b=fread(fid,size,'uchar',7);
fseek(fid,frameloc+7,-1);
c=fread(fid,size,'uchar',7);
endbyte=ftell(fid)-7;
else
x=0;y=0;c=0;b=0;endbyte=0;
end
case {1} %2D paletted ilda
fseek(fid,16,0);
size=fread(fid,1,'ushort');
if size ~= 0
fseek(fid,6,0);
frameloc=ftell(fid);
x=fread(fid,size,'short',4);
fseek(fid,frameloc+2,-1);
y=fread(fid,size,'short',4);
fseek(fid,frameloc+4,-1);
b=fread(fid,size,'uchar',5);
fseek(fid,frameloc+5,-1);
c=fread(fid,size,'uchar',5);
endbyte=ftell(fid)-5;
else
x=0;y=0;c=0;b=0;endbyte=0;
end
case {4} %3D 24 bit color ilda
fseek(fid,16,0);
size=fread(fid,1,'ushort'); %read in number of points
if size ~= 0
fseek(fid,6,0); %skip to frame data
frameloc=ftell(fid);
x=fread(fid,size,'short',8);
fseek(fid,frameloc+2,-1);
y=fread(fid,size,'short',8);
fseek(fid,frameloc+6,-1);
b=fread(fid,size,'uchar',9);
fseek(fid,frameloc+7,-1);
c=fread(fid,size,'ubit24',7*8); %skip is in bits
endbyte=ftell(fid)-7; %remove final skip
else
x=0;y=0;c=0;b=0;endbyte=0;
end
case {5} %2D 24 bit color ilda
fseek(fid,16,0);
size=fread(fid,1,'ushort'); %read in number of points
if size ~= 0
fseek(fid,6,0); %skip to frame data
frameloc=ftell(fid);
x=fread(fid,size,'short',6);
fseek(fid,frameloc+2,-1);
y=fread(fid,size,'short',6);
fseek(fid,frameloc+4,-1);
b=fread(fid,size,'uchar',7);
fseek(fid,frameloc+5,-1);
c=fread(fid,size,'ubit24',5*8); %skip is in bits
endbyte=ftell(fid)-5;
else
x=0;y=0;c=0;b=0;endbyte=0;
end
otherwise
disp('Unknown frame format');
end
more=0;
if ~fseek(fid,33,0)
more=1;
end
fclose(fid);
f=[x,y,c,bitget(b,7)];
You use it like this: