TEAP (Toolbox for Emotion Analysis using Physiological Signals) doc
iopen.m
Go to the documentation of this file.
1 function [HDR,data] = iopen(HDR,PERMISSION,CHAN,MODE,arg5,arg6)
2 % IOPEN opens image files for reading and writing and returns
3 % the header information. Many different IMAGE formats are supported.
4 %
5 % HDR = iopen(Filename, PERMISSION, [, CHAN [, MODE]]);
6 %
7 % PERMISSION is one of the following strings
8 % 'r' read header
9 % 'w' write header
10 %
11 % HDR contains the Headerinformation and internal data
12 %
13 % see also: SLOAD, SREAD, SSEEK, STELL, SCLOSE, SWRITE, SEOF
14 
15 
16 % This program is free software; you can redistribute it and/or
17 % modify it under the terms of the GNU General Public License
18 % as published by the Free Software Foundation; either version 3
19 % of the License, or (at your option) any later version.
20 
21 % $Id: iopen.m 2205 2009-10-27 12:18:15Z schloegl $
22 % (C) 2005,2007,2008 by Alois Schloegl <a.schloegl@ieee.org>
23 % This is part of the BIOSIG-toolbox http://biosig.sf.net/
24 
25 data = [];
26 
27 if isstruct(HDR),
28 
29 elseif ischar(HDR) & exist(HDR)==2,
30  HDR = getfiletype(HDR);
31 end;
32 
33 
34 if 0,
35 
36 elseif strcmp(HDR.TYPE,'IMAGE:BMP'),
37  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
38  fseek(HDR.FILE.FID,10,-1);
39 
40  tmp = fread(HDR.FILE.FID,4,'uint32');
41  HDR.HeadLen = tmp(1);
42  HDR.BMP.sizeBitmapInfoHeader = tmp(2);
43  HDR.IMAGE.Size = tmp(3:4)';
44 
45  tmp = fread(HDR.FILE.FID,2,'uint16');
46  HDR.BMP.biPlanes = tmp(1);
47  HDR.bits = tmp(2);
48 
49  tmp = fread(HDR.FILE.FID,6,'uint32');
50  HDR.BMP.biCompression = tmp(1);
51  HDR.BMP.biImageSize = tmp(2);
52  HDR.BMP.biXPelsPerMeter = tmp(3);
53  HDR.BMP.biYPelsPerMeter = tmp(4);
54  HDR.BMP.biColorUsed = tmp(5);
55  HDR.BMP.biColorImportant = tmp(6);
56  HDR.FILE.OPEN = 1;
57 
58 
59 elseif strcmp(HDR.TYPE,'IMAGE:FITS'),
60  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-be');
61 
62  KK = 0;
63  HDR.HeadLen = ftell(HDR.FILE.FID);
64  BlockSize = 0;
65  cpl = 80; % char's per line
66  while (HDR.FILE.size > HDR.HeadLen(max(KK,1))+BlockSize),
67  KK = KK+1;
68  HDR.FITS{KK} = [];
69  FLAG.END = 0;
70  while (~FLAG.END),
71  [tmp,c] = fread(HDR.FILE.FID,[cpl,36],'uchar');
72  if (c<cpl*36)
73  fprintf(HDR.FILE.stderr,'Warning IOPEN: incomplete block\n');
74  end;
75  data = char(tmp)';
76 % [FLAG.END,ftell(HDR.FILE.FID),size(data)],
77  for k = 1:size(data,1),
78  s = data(k,:);
79  if strncmp(s,'COMMENT',7);
80 
81  elseif strncmp(s,'HISTORY',7);
82 
83  elseif all(s(9:10)=='= ');
84  len = min([cpl,find(s=='/')-1]);
85  [key, t] = strtok(s, '= ');
86  key(key=='-') = '_';
87  if s(11)==char(39), % string
88  [val, t] = strtok(s(11:len),char(39));
89  HDR.FITS{KK} = setfield(HDR.FITS{KK},key,val);
90  elseif any(s(30)=='TF'), % logical
91  HDR.FITS{KK} = setfield(HDR.FITS{KK},key,s(30)=='T');
92  elseif all(s(11:len)==' '), % empty
93  HDR.FITS{KK} = setfield(HDR.FITS{KK},key,[]);
94  elseif all(s(11:len)=='('), % complex
95  [val,status] = str2double(s(11:len),[],'(,)');
96  HDR.FITS{KK} = setfield(HDR.FITS{KK},key,val(1)+i*val(2));
97  else % numerical
98  [val,status] = str2double(s(11:len));
99  if any(status),
100  s(s=='D')='E';
101  [val,status] = str2double(s(11:len));
102  end;
103  if any(status),
104  fprintf(2,'Warning SOPEN (FITS): Expected numerical value - found string \n\t%s: %s\n',key,s(11:len));
105  HDR.FITS{KK} = setfield(HDR.FITS{KK},key,s(11:len));
106  else
107  HDR.FITS{KK} = setfield(HDR.FITS{KK},key,val);
108  end;
109  end
110 
111  elseif strncmp(s,'END',3)
112  FLAG.END = 1;
113 
114  %elseif strncmp(s,' ',8),
115 
116  else
117  % fprintf(2,'ERROR SOPEN (FITS): "%s"\n',s);
118  end;
119  end;
120  end;
121 
122  HDR.HeadLen(KK) = ftell(HDR.FILE.FID);
123  HDR.IMAGE(KK).Size = [0,0];
124 
125  for k = 1:HDR.FITS{KK}.NAXIS,
126  HDR.IMAGE(KK).Size(k) = getfield(HDR.FITS{KK},['NAXIS',int2str(k)]);
127  end;
128  HDR.IMAGE_Size(KK) = prod(HDR.IMAGE(KK).Size);
129 
130  HDR.GDFTYP = ['uint',num2str(HDR.FITS{1}.BITPIX)];
131 
132 % data = fread(HDR.FILE.FID,prod(HDR.IMAGE.Size),HDR.GDFTYP);
133 % data = reshape(data,HDR.IMAGE.Size); % * HDR.Cal + HDR.Off;
134 
135  BlockSize = ceil(prod(HDR.IMAGE(KK).Size)*abs(HDR.FITS{KK}.BITPIX)/(8*36*cpl))*cpl*36;
136  fseek(HDR.FILE.FID,BlockSize,'cof');
137 
138  end;
139 % fclose(HDR.FILE.FID);
140  HDR.FILE.OPEN = 1;
141 
142 
143 elseif strcmp(HDR.TYPE,'IMAGE:IFS'), % Ultrasound file format
144  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
145  HDR.HeadLen = 512;
146  hdr = fread(HDR.FILE.FID,[1,HDR.HeadLen],'uchar');
147  HDR.Date = char(hdr(77:100));
148  tmp = char(hdr(213:220));
149  if strncmp(tmp,'32flt',5)
150  HDR.GDFTYP = 'float32';
151  elseif strncmp(tmp,'u8bit',5)
152  HDR.GDFTYP = 'uint8';
153  else
154 
155  end
156  fclose(HDR.FILE.FID);
157 
158 
159 elseif strcmp(HDR.TYPE,'IMAGE:EXIF') | strncmp(HDR.TYPE,'IMAGE:JPG',9),
160  GDFTYP = {'uint8','char','uint16','uint32','2*uint32','int8','uint8','int16','int32','2*int32','float32','float64'};
161  GDFTYP = {'uint8','char','uint16','uint32','uint64','int8','uint8','int16','int32','int64','float32','float64'};
162  size0 = [1,1,2,4,8,1,1,2,4,8,4,8];
163 
164  HDR.EXIF = [];
165  HDR.JPEG = [];
166  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],HDR.Endianity);
167  tag = fread(HDR.FILE.FID,[1],'uint16');
168  if tag == hex2dec('FFD8'), % compressed: JPEG or EXIF
169 
170  POS = ftell(HDR.FILE.FID);
171  tag = fread(HDR.FILE.FID,1,'uint16');
172  LEN = fread(HDR.FILE.FID,1,'uint16');
173  while ftell(HDR.FILE.FID)<HDR.FILE.size,
174  if 0,
175  elseif (tag == hex2dec('8298')) % image data
176  HDR.EXIF.Copyright = fread(HDR.FILE.FID,LEN-2,'uint8');
177  elseif (tag == hex2dec('F9FE')) % image data
178  HDR.data.compressed = fread(HDR.FILE.FID,LEN-2,'uint8');
179  elseif (tag == hex2dec('FEFA')) % JPEG field: (thumbnail?)
180  HDR.JPEG.FEFA = fread(HDR.FILE.FID,LEN-2,'uint8');
181  elseif (tag == hex2dec('FF00')) % JPEG field: (thumbnail?)
182  HDR.JPEG.FF00 = fread(HDR.FILE.FID,LEN-2,'uint8');
183  elseif (tag == hex2dec('FFC0')) % JPEG field: start of frame
184  HDR.JPEG.BITS = fread(HDR.FILE.FID,1,'uint8');
185  HDR.IMAGE.Size= fread(HDR.FILE.FID,[1,2],'uint16');
186  HDR.JPEG.SOF = fread(HDR.FILE.FID,10,'uint8');
187  elseif (tag == hex2dec('FFD9')) % JPEG field: end of data
188  HDR.EXIF.EOD = 1;
189  elseif (tag == hex2dec('FFC4')) % JPEG field:
190  tmp = fread(HDR.FILE.FID,LEN-2,'uint8');
191  if isfield(HDR.JPEG,'C4');
192  HDR.JPEG.C4{length(HDR.JPEG.C4)+1}=tmp;
193  else
194  HDR.JPEG.C4{1} = tmp;
195  end;
196  elseif (tag == hex2dec('FFDA')) % JPEG field: start of scan
197  HDR.JPEG.SOS = fread(HDR.FILE.FID,10,'uint8');
198  elseif (tag == hex2dec('FFDB')) % EXIF field: Quantization Table
199  tmp = fread(HDR.FILE.FID,[65,3],'uint8');
200  if isfield(HDR.JPEG,'DQT');
201  HDR.JPEG.DQT{length(HDR.JPEG.DQT)+1}=tmp;
202  else
203  HDR.JPEG.DQT{1} = tmp;
204  end;
205 
206  elseif (tag == hex2dec('FFDD')) % EXIF field:
207  HDR.EXIF.DRI = fread(HDR.FILE.FID,1,'uint16');
208  elseif (tag == hex2dec('FFE0')) % JPEG
209  HDR.JPEG.E0 = fread(HDR.FILE.FID,LEN-2,'uint8');
210  elseif (tag == hex2dec('FFE1')) % EXIF field: APP1
211  tmp = fread(HDR.FILE.FID,[1,6],'uint8');
212  if ~strncmp(char(tmp),'Exif',4)
213  fprintf(HDR.FILE.stderr,'Warning EXIF: tag FFE1 is not EXIF but %s\n',char(tmp));
214  end;
215  pos = ftell(HDR.FILE.FID);
216  s = fread(HDR.FILE.FID,[1,4],'uint8');
217  if all(s(1:4)==[73,73,42,0]);
218  H.TYPE='IMAGE:TIFF';
219  H.Endianity = 'ieee-le';
220  H.FLAG.BigTIFF = 0;
221  elseif all(s(1:4)==[77,77,0,42]);
222  H.TYPE='IMAGE:TIFF';
223  H.Endianity = 'ieee-be';
224  H.FLAG.BigTIFF = 0;
225  else
226  fprintf(HDR.FILE.stderr,'Warning EXIF: invalid TIFF tag %s\n',char(s));
227  end;
228  if ~strcmp(HDR.Endianity,H.Endianity)
229  % {HDR.Endianity;H.Endianity}
230  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],H.Endianity);
231  fseek(HDR.FILE.FID,pos+4,'bof');
232  HDR.FILE.OPEN = 1;
233  end;
234 
235  offset.IFD0 = fread(HDR.FILE.FID,1,'uint32');
236  fseek(HDR.FILE.FID, pos+offset.IFD0, 'bof');
237  nf = fread(HDR.FILE.FID,1,'uint16');
238  if nf ~= 11;
239  fprintf(HDR.FILE.stderr,'Warning EXIF: %i instead of 11 %i tags.\n',nf);
240 % if nf>11, return; end;
241  end;
242 
243  for k = 1:nf,
244  tmp = fread(HDR.FILE.FID,2,'uint16');
245  tagid(k) = tmp(1);
246  typ(k) = tmp(2);
247  tmp = fread(HDR.FILE.FID,1,'uint32');
248  count(k) = tmp(1);
249  if count(k)*size0(typ(k))>4
250  valoffset(k) = fread(HDR.FILE.FID,1,'uint32');
251  else
252  tmp = fread(HDR.FILE.FID,4/size0(typ(k)),GDFTYP{typ(k)});
253  VAL{k} = tmp(1:count(k));
254  end;
255  end;
256  len = fread(HDR.FILE.FID,1,'uint16'); % jump to next IFD
257  if len>0, LEN = len; end;
258  HDR.EXIF.ResolutionUnit = 2; % default value
259  for k = 1:nf,
260  if count(k)*size0(typ(k))>4
261  fseek(HDR.FILE.FID,pos+valoffset(k),'bof');
262  if (typ(k)==5)
263  tmp = fread(HDR.FILE.FID,[count(k),2],'int32');
264  tmp = tmp(:,1)./tmp(:,2);
265  else
266  tmp = fread(HDR.FILE.FID,count(k),GDFTYP{typ(k)});
267  end;
268  else
269  tmp = VAL{k};
270  end;
271  if tagid(k)==270
272  HDR.EXIF.ImageDesc = char(tmp(:)');
273  elseif tagid(k)==271
274  HDR.EXIF.Make = char(tmp(:)');
275  elseif tagid(k)==272
276  HDR.EXIF.Model = char(tmp(:)');
277  elseif tagid(k)==274
278  HDR.EXIF.Orientation = tmp';
279  elseif tagid(k)==282
280  HDR.EXIF.XResolution = tmp;
281  elseif tagid(k)==283
282  HDR.EXIF.YResolution = tmp;
283  elseif tagid(k)==289
284  HDR.EXIF.Orientation = tmp;
285  elseif tagid(k)==296
286  if tmp==2,
287  HDR.EXIF.ResolutionUnit = 'inch';
288  elseif tmp==3,
289  HDR.EXIF.ResolutionUnit = 'cm';
290  end;
291  elseif tagid(k)==305
292  HDR.EXIF.SoftwareVersion = char(tmp');
293  elseif tagid(k)==306
294  HDR.EXIF.Date = char(tmp');
295  HDR.T0 = str2double(HDR.EXIF.Date,': ');
296  elseif tagid(k)==531
297  HDR.EXIF.YCbCrPositioning = tmp;
298  elseif tagid(k)==33432
299  HDR.EXIF.Copyright = char(tmp');
300  elseif tagid(k)==34665
301  HDR.EXIF.IFDPointer = tmp;
302  elseif tagid(k)==34853
303  HDR.EXIF.GPS_IFDPointer = tmp;
304  elseif tagid(k)==40965
305  HDR.EXIF.Interoperability_IFDPointer = tmp;
306 
307  elseif tagid(k)==41985
308  HDR.EXIF.CostumRendered = tmp;
309  elseif tagid(k)==41986
310  HDR.EXIF.ExposureMode = tmp;
311  elseif tagid(k)==41987
312  HDR.EXIF.WhiteBalance = tmp;
313  elseif tagid(k)==41988
314  HDR.EXIF.DigitalZoomratio = tmp;
315  elseif tagid(k)==41989
316  HDR.EXIF.FocalLengthIn35mmFilm = tmp;
317  elseif tagid(k)==41990
318  HDR.EXIF.SceneCaptureType = tmp;
319  elseif tagid(k)==41991
320  HDR.EXIF.GainControl = tmp;
321  elseif tagid(k)==41992
322  HDR.EXIF.Contrast = tmp;
323  elseif tagid(k)==41993
324  HDR.EXIF.Saturation = tmp;
325  elseif tagid(k)==41994
326  HDR.EXIF.Sharpness = tmp;
327  elseif tagid(k)==41995
328  HDR.EXIF.DeviceSettingDescription = tmp;
329  elseif tagid(k)==41996
330  HDR.EXIF.SubjectDistanceRange = tmp;
331  elseif tagid(k)==42016
332  HDR.EXIF.imageUniqueID = tmp;
333 
334  elseif tagid(k)==hex2dec('c4a5')
335  HDR.EXIF.c4a5 = tmp';
336  else
337  dec2hex(tagid(k)),
338  tagid(k),tmp,
339  end;
340  end
341  if ~strcmp(HDR.Endianity,H.Endianity)
342  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],HDR.Endianity);
343  end;
344  %HDR.EXIF.APP1 = fread(HDR.FILE.FID,LEN-2-6-4,'uint8');
345  elseif (tag == hex2dec('FFE2')) % EXIF field: APP2
346  HDR.EXIF.APP2 = fread(HDR.FILE.FID,LEN-2,'uint8')';
347  elseif (tag == hex2dec('FFE3')) % EXIF field: APP3
348  HDR.EXIF.APP3 = fread(HDR.FILE.FID,LEN-2,'uint8')';
349 
350  elseif (tag == hex2dec('FFEC')) % JPEG
351  tmp = char(fread(HDR.FILE.FID,[1,LEN-2],'uint8'));
352  if isfield(HDR.JPEG,'EC');
353  HDR.JPEG.EC{length(HDR.JPEG.EC)+1}=tmp;
354  else
355  HDR.JPEG.EC{1} = tmp;
356  end;
357  elseif (tag == hex2dec('FFED')) % JPEG
358  tmp = char(fread(HDR.FILE.FID,[1,LEN-2],'uint8'));
359  if isfield(HDR.JPEG,'ED');
360  HDR.JPEG.ED{length(HDR.JPEG.ED)+1}=tmp;
361  else
362  HDR.JPEG.ED{1} = tmp;
363  end;
364  elseif (tag == hex2dec('FFFD')) % JPEG
365  tmp = char(fread(HDR.FILE.FID,[1,LEN-2],'uint8'));
366  if isfield(HDR.JPEG,'FD');
367  HDR.JPEG.FD{length(HDR.JPEG.FD)+1}=tmp;
368  else
369  HDR.JPEG.FD{1} = tmp;
370  end;
371  elseif (tag == hex2dec('FFEE')) % JPEG
372  tmp = char(fread(HDR.FILE.FID,[1,LEN-2],'uint8'));
373  if isfield(HDR.JPEG,'EE');
374  HDR.JPEG.EE{length(HDR.JPEG.EE)+1}=tmp;
375  else
376  HDR.JPEG.EE{1} = tmp;
377  end;
378  elseif (tag == hex2dec('FFFE')) % JPEG
379  tmp = char(fread(HDR.FILE.FID,[1,LEN-2],'uint8'));
380  if isfield(HDR.JPEG,'FE');
381  HDR.JPEG.FE{length(HDR.JPEG.FE)+1}=tmp;
382  else
383  HDR.JPEG.FE{1} = tmp;
384  end;
385  elseif 1, %tag>=15/16*2^16;
386  %fprintf(1,'%5i\t%4x\t%5i\n',LEN,tag,tag);
387  else
388  fprintf(1,'%5i\t%4x\t%5i\n',LEN,tag,tag);
389  end;
390  fseek(HDR.FILE.FID,POS+LEN+2,'bof');
391  POS = ftell(HDR.FILE.FID);
392  tag = fread(HDR.FILE.FID,1,'uint16');
393  LEN = fread(HDR.FILE.FID,1,'uint16');
394  end;
395  end;
396  fclose(HDR.FILE.FID);
397 
398 
399 elseif strcmp(HDR.TYPE,'IMAGE:HGT'),
400  % int16 big-endian
401  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,''],'ieee-be');
402  HDR.IMAGE.Size = [1,1] * sqrt(HDR.FILE.size/2);
403  HDR.FILE.OPEN = 1;
404 
405 
406 
407 elseif strcmp(HDR.TYPE,'IMAGE:JPG'),
408  GDFTYP = {'uint8','char','uint16','uint32','2*uint32','int8','uint8','int16','int32','2*int32','float32','float64'};
409  GDFTYP = {'uint8','char','uint16','uint32','uint64','int8','uint8','int16','int32','int64','float32','float64'};
410 
411  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
412  HDR.JPEG.H1 = fread(HDR.FILE.FID,[1,8],'uchar');
413 
414  % IFD
415  TAG = fread(HDR.FILE.FID,1,'uint16');
416  type = fread(HDR.FILE.FID,1,'uint16');
417  count = fread(HDR.FILE.FID,1,'uint32');
418  offset = fread(HDR.FILE.FID,1,'uint32');
419 
420 
421  fclose(HDR.FILE.FID);
422 
423 
424 
425 elseif strcmp(HDR.TYPE,'IMAGE:PCX'),
426 
427  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
428  tmp = fread(HDR.FILE.FID,[1,4],'uchar');
429  HDR.PCX.Version = tmp(2);
430  HDR.Bits = tmp(4);
431  axis_size = fread(HDR.FILE.FID,[1,6],'uint16');
432  HDR.IMAGE.Size = axis_size([3:4])-axis_size([1:2]);
433  HDR.PCX.dpi = axis_size(5:6);
434  LUT = fread(HDR.FILE.FID,[1,48],'uint8');
435  tmp = fread(HDR.FILE.FID,[5],'uint16');
436  HDR.PCX.Nplanes = tmp(1);
437 
438  if HDR.Bits==8,
439  fseek(HDR.FILE.FID,3*256,'eof');
440  HDR.IMAGE.Palette = fread(HDR.FILE.FID,[256,3],'uint8');
441  end;
442 
443  fseek(HDR.FILE.FID,128,'bof');
444 
445 
446  fclose(HDR.FILE.FID);
447 
448 
449 
450 elseif strcmp(HDR.TYPE,'IMAGE:PBMA') | strcmp(HDR.TYPE,'IMAGE:PGMA') | strcmp(HDR.TYPE,'IMAGE:PPMA') ,
451  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'t'],'ieee-le');
452 
453  N = NaN;
454  K = 1;
455  s = [];
456  HDR.IMAGE.Size = [inf,inf];
457  data = [];
458  while ~feof(HDR.FILE.FID) & (length(data)<prod(HDR.IMAGE.Size))
459  line = fgetl(HDR.FILE.FID);
460 
461  if isempty(line),
462  elseif strncmp(line,'P1',2),
463  N = 1;
464  elseif strncmp(line,'P2',2),
465  N = 2;
466  elseif strncmp(line,'P3',2),
467  N = 2;
468  elseif line(1)=='#',
469  elseif isnumeric(line),
470  elseif K==1,
471  [tmp, status] = str2double(line);
472  K = K + 1;
473  HDR.IMAGE.Size = tmp;
474  if status
475  error('IOPEN (PPMA)');
476  end;
477  elseif K==N,
478  [tmp, status] = str2double(line);
479  K = K + 1;
480  HDR.DigMax = tmp;
481  else
482  line = line(1:min([find(line=='#'),length(line)])); % remove comment
483  [tmp,status] = str2double(char(line)); %,[],[9,10,13,32])
484  if ~any(status),
485  s = [s; tmp'];
486  end;
487  end;
488  end;
489  fclose(HDR.FILE.FID);
490 
491  if strcmp(HDR.TYPE,'IMAGE:PPMA'),
492  if prod(HDR.IMAGE.Size)*3~=length(s),
493  fprintf(HDR.FILE.stderr,'SLOAD(P3): %i * %i != %i \n',HDR.IMAGE.Size,length(s));
494  else
495  data = repmat(NaN,[HDR.IMAGE.Size,3]);
496  data(:,:,1) = reshape(s(1:3:end),HDR.IMAGE.Size)';
497  data(:,:,2) = reshape(s(2:3:end),HDR.IMAGE.Size)';
498  data(:,:,3) = reshape(s(3:3:end),HDR.IMAGE.Size)';
499  end;
500  else
501  if prod(HDR.IMAGE.Size)~=length(s),
502  fprintf(HDR.FILE.stderr,'SLOAD(P1/P2): %i * %i != %i \n',HDR.IMAGE.Size,length(s));
503  else
504  data = reshape(s,HDR.IMAGE.Size)';
505  end;
506  end;
507 
508 
509 elseif strcmp(HDR.TYPE,'IMAGE:PBMB'),
510  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
511  status = fseek(HDR.FILE.FID, HDR.HeadLen, 'bof');
512  [tmp,count] = fread(HDR.FILE.FID,[HDR.IMAGE.Size(2)/8,HDR.IMAGE.Size(1)],'uint8');
513  fclose(HDR.FILE.FID);
514 
515  data = zeros(HDR.IMAGE.Size)';
516 
517  for k = 1:8,
518  data(:,k:8:HDR.IMAGE.Size(1)) = bitand(tmp',2^(8-k))>0;
519  end;
520 
521 elseif strcmp(HDR.TYPE,'IMAGE:PGMB'),
522  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
523  status = fseek(HDR.FILE.FID, HDR.HeadLen, 'bof');
524  [data,count] = fread(HDR.FILE.FID,HDR.IMAGE.Size,'uint8');
525  fclose(HDR.FILE.FID);
526  data = data';
527 
528 elseif strcmp(HDR.TYPE,'IMAGE:PPMB'),
529  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],'ieee-le');
530  status = fseek(HDR.FILE.FID, HDR.HeadLen, 'bof');
531  [tmp,count] = fread(HDR.FILE.FID,[3*HDR.IMAGE.Size(1),HDR.IMAGE.Size(2)],'uint8');
532  fclose(HDR.FILE.FID);
533 
534  data = zeros([HDR.IMAGE.Size([2,1]),3]);
535  data(:,:,1) = tmp(1:3:end,:)';
536  data(:,:,2) = tmp(2:3:end,:)';
537  data(:,:,3) = tmp(3:3:end,:)';
538 
539 
540 elseif strcmp(HDR.TYPE,'IMAGE:TIFF'),
541  GDFTYP = {'uint8','char','uint16','uint32','2*uint32','int8','uint8','int16','int32','2*int32','float32','float64'};
542  GDFTYP = {'uint8','char','uint16','uint32','uint32','int8','uint8','int16','int32','int32','float32','float64'};
543  GDFTYP{16} = 'uint64';
544  GDFTYP{17} = 'int64';
545  SIZEOF = [1,1,2,4,8,1,1,2,4,8,4,8,0,0,0,8,8,8];
546 
547  if ~HDR.FLAG.BigTIFF,
548  NIFD_TYPE = 'uint16';
549  IFD_TYPE = 'uint32';
550  else
551  NIFD_TYPE = 'uint64';
552  IFD_TYPE = 'uint64';
553  end;
554 
555  if ~HDR.FILE.OPEN,
556  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'b'],HDR.Endianity);
557  end;
558  [tmp,c] = fread(HDR.FILE.FID,2,IFD_TYPE);
559  OFFSET = tmp(2);
560 
561  % default values
562  HDR.TIFF.Compression = 1;
563 
564  % read IFD
565  K = 1;
566  while OFFSET,
567  status = fseek(HDR.FILE.FID, OFFSET, 'bof');
568  [NIFD,c] = fread(HDR.FILE.FID,1,NIFD_TYPE);
569  for k = 1:NIFD,
570  POS = ftell(HDR.FILE.FID);
571  [tmp,c] = fread(HDR.FILE.FID,2,'uint16');
572  TAG = tmp(1);
573  TYP = tmp(2);
574 
575  [COUNT,c] = fread(HDR.FILE.FID,1,IFD_TYPE);
576 
577  FLAG = any(TYP==[1:12,16:17]);
578  if FLAG,
579  if (COUNT * SIZEOF(TYP)) > 4+4*HDR.FLAG.BigTIFF,
580  [OFFSET, c] = fread(HDR.FILE.FID, 1, IFD_TYPE);
581  status = fseek(HDR.FILE.FID, OFFSET, 'bof');
582  end;
583  if any(TAG==[5,10])
584  [VALUE,c] = fread(HDR.FILE.FID, [2,COUNT], GDFTYP{TYP});
585  VALUE = VALUE(1,:)./VALUE(2,:);
586  else
587  [VALUE,c] = fread(HDR.FILE.FID, [1,COUNT], GDFTYP{TYP});
588  if TAG==2, VALUE=char(VALUE); end;
589  end;
590 
591  end;
592 
593  if ~FLAG,
594 
595  elseif TAG==254
596  HDR.TIFF.NewSubFileType = VALUE;
597  elseif TAG==255
598  HDR.TIFF.SubFileType = VALUE;
599  elseif TAG==256
600  HDR.IMAGE.Size(2) = VALUE;
601  elseif TAG==257
602  HDR.IMAGE.Size(1) = VALUE;
603  elseif TAG==258
604  HDR.Bits = VALUE(:)';
605  HDR.IMAGE.Size(3) = length(VALUE);
606  if any(VALUE~=VALUE(1))
607  fprintf(HDR.FILE.stderr,'Warning IOPEN: different BitsPerSample not supported.\n');
608  end;
609  elseif TAG==259
610  HDR.TIFF.Compression = VALUE;
611  elseif TAG==262,
612  HDR.FLAG.PhotometricInterpretation = ~VALUE;
613  elseif TAG==263,
614  HDR.FLAG.Thresholding = VALUE;
615  elseif TAG==264,
616  HDR.FLAG.CellWidth = VALUE;
617  elseif TAG==265,
618  HDR.FLAG.CellLength = VALUE;
619  elseif TAG==266,
620  HDR.FLAG.FillOrder = VALUE;
621  elseif TAG==269,
622  HDR.TIFF.DocumentName = VALUE;
623  elseif TAG==270,
624  HDR.TIFF.ImageDescription = VALUE;
625  elseif TAG==271,
626  HDR.TIFF.Maker = VALUE;
627  elseif TAG==272,
628  HDR.TIFF.Model = VALUE;
629  elseif TAG==273,
630  HDR.TIFF.StripOffset = VALUE;
631  elseif TAG==274,
632  HDR.TIFF.Orientation = VALUE;
633  elseif TAG==277,
634  HDR.TIFF.SamplesPerPixel = VALUE;
635  elseif TAG==278,
636  HDR.TIFF.RowsPerStrip = VALUE;
637  elseif TAG==279,
638  HDR.TIFF.StripByteCounts = VALUE;
639  elseif TAG==280,
640  HDR.DigMin = VALUE;
641  elseif TAG==281,
642  HDR.DigMax = VALUE;
643  elseif TAG==282,
644  HDR.TIFF.XResolution = VALUE;
645  elseif TAG==283,
646  HDR.TIFF.YResolution = VALUE;
647  elseif TAG==284,
648  HDR.TIFF.PlanarConfiguration = VALUE;
649  elseif TAG==285,
650  HDR.TIFF.PageName = char(VALUE);
651  elseif TAG==286,
652  HDR.TIFF.Xposition = VALUE;
653  elseif TAG==287,
654  HDR.TIFF.Yposition = VALUE;
655  elseif TAG==288,
656  HDR.TIFF.FreeOffset = VALUE;
657  elseif TAG==289,
658  HDR.TIFF.FreeBytesCount = VALUE;
659  elseif TAG==290,
660  HDR.TIFF.GrayResponseUnit = VALUE;
661  elseif TAG==291,
662  HDR.TIFF.GrayResponseCurve = VALUE;
663  elseif TAG==292,
664  HDR.TIFF.T4Options = VALUE;
665  elseif TAG==293,
666  HDR.TIFF.T6Options = VALUE;
667  elseif TAG==296,
668  if VALUE==1,
669  HDR.TIFF.ResolutionUnit = '';
670  elseif VALUE==2,
671  HDR.TIFF.ResolutionUnit = 'Inch';
672  elseif VALUE==3,
673  HDR.TIFF.ResolutionUnit = 'cm';
674  end;
675  elseif TAG==297,
676  HDR.TIFF.PageNumber = VALUE;
677  elseif TAG==301,
678  HDR.TIFF.TansferFunction = VALUE;
679  elseif TAG==305,
680  HDR.Software = VALUE;
681  elseif TAG==306,
682  HDR.TIFF.DateTime = VALUE;
683  [tmp,status] = str2double(VALUE,': ');
684  if ~any(status)
685  HDR.T0 = tmp;
686  end;
687  elseif TAG==315,
688  HDR.Artist = VALUE;
689  elseif TAG==316,
690  HDR.TIFF.HostComputer = VALUE;
691  elseif TAG==317,
692  HDR.TIFF.Predictor = VALUE;
693  elseif TAG==318,
694  HDR.TIFF.WhitePoint = VALUE;
695  elseif TAG==319,
696  HDR.TIFF.PrimaryChromatics = VALUE;
697  elseif TAG==320,
698  HDR.TIFF.ColorMap = reshape(VALUE,3,2^HDR.Bits(1))';
699  elseif TAG==321,
700  HDR.TIFF.HalftoneHints = VALUE;
701  elseif TAG==322,
702  HDR.TIFF.TileWidth = VALUE;
703  elseif TAG==323,
704  HDR.TIFF.TileLength = VALUE;
705  elseif TAG==324,
706  HDR.TIFF.TileOffset = VALUE;
707  elseif TAG==325,
708  HDR.TIFF.TileByteCount = VALUE;
709  elseif TAG==326,
710  HDR.TIFF.BadFaxLines = VALUE;
711  elseif TAG==327,
712  HDR.TIFF.CleanFaxData = VALUE;
713  elseif TAG==328,
714  HDR.TIFF.ConsecutiveBadFaxLines = VALUE;
715  elseif TAG==330,
716  HDR.TIFF.SubIFDs = VALUE;
717  elseif TAG==332,
718  HDR.TIFF.InkSet = VALUE;
719  elseif TAG==333,
720  HDR.TIFF.InkNames = VALUE;
721  elseif TAG==334,
722  HDR.TIFF.NumberOfInks = VALUE;
723  elseif TAG==336,
724  HDR.TIFF.DotRange = VALUE;
725  elseif TAG==337,
726  HDR.TIFF.TargetPrinter = VALUE;
727  elseif TAG==338,
728  HDR.TIFF.ExtraSamples = VALUE;
729  elseif TAG==339,
730  HDR.TIFF.SampleFormat = VALUE;
731  elseif TAG==340,
732  HDR.TIFF.SMinSampleValue = VALUE;
733  elseif TAG==341,
734  HDR.TIFF.SMaxSampleValue = VALUE;
735  elseif TAG==342,
736  HDR.TIFF.TransferRange = VALUE;
737 
738  elseif TAG==512,
739  HDR.TIFF.JPEGProc = VALUE;
740  elseif TAG==513,
741  HDR.TIFF.JPEGInterchangeFormat = VALUE;
742  elseif TAG==514,
743  HDR.TIFF.JPEGInterchangeFormatLength = VALUE;
744  elseif TAG==515,
745  HDR.TIFF.JPEGRestartInterval = VALUE;
746 
747  elseif TAG==517,
748  HDR.TIFF.JPEGLosslessPredictors = VALUE;
749  elseif TAG==518,
750  HDR.TIFF.JPEGPointTransforms = VALUE;
751  elseif TAG==519,
752  HDR.TIFF.JPEGQTables = VALUE;
753  elseif TAG==520,
754  HDR.TIFF.JPEGDCTables = VALUE;
755  elseif TAG==521,
756  HDR.TIFF.JPEGACTables = VALUE;
757  elseif TAG==529,
758  HDR.TIFF.YCbCrCoefficients = VALUE;
759  elseif TAG==530,
760  HDR.TIFF.YCbCrSubSampling = VALUE;
761  elseif TAG==531,
762  HDR.TIFF.YCbCrPositioning = VALUE;
763  elseif TAG==532,
764  HDR.TIFF.ReferenceBlackWhite = VALUE;
765 
766  elseif TAG==700,
767  HDR.TIFF.XML_Packet = char(VALUE);
768 
769  elseif TAG==1024,
770  HDR.TIFF.GEO.GTModelTypeGeoKey = VALUE;
771  elseif TAG==1025,
772  HDR.TIFF.GEO.GTRasterTypeGeoKey = VALUE;
773  elseif TAG==1026,
774  HDR.TIFF.GEO.GTCitationGeoKey = VALUE;
775  elseif TAG==2048,
776  HDR.TIFF.GEO.GeographicTypeGeoKey = VALUE;
777  elseif TAG==2049,
778  HDR.TIFF.GEO.GeogCitationGeoKey = VALUE;
779  elseif TAG==2050,
780  HDR.TIFF.GEO.GeogGeodeticDatumGeoKey = VALUE;
781  elseif TAG==2051,
782  HDR.TIFF.GEO.GeogPrimeMeridianGeoKey = VALUE;
783  elseif TAG==2052,
784  HDR.TIFF.GEO.GeogLinearUnitsGeoKey = VALUE;
785  elseif TAG==2053,
786  HDR.TIFF.GEO.GeogLinearUnitSizeGeoKey = VALUE;
787  elseif TAG==2054,
788  HDR.TIFF.GEO.GeogAngularUnitsGeoKey = VALUE;
789  elseif TAG==2055,
790  HDR.TIFF.GEO.GeogAngularUnitSizeGeoKey = VALUE;
791  elseif TAG==2061,
792  HDR.TIFF.GEO.GeogPrimeMeridianLongGeoKey = VALUE;
793  elseif TAG==2061,
794  HDR.TIFF.GEO.GeogPrimeMeridianLongGeoKey = VALUE;
795 
796  elseif TAG==3074,
797  HDR.TIFF.GEO.ProjectionGeoKey = VALUE;
798 
799  elseif TAG==32781,
800  HDR.TIFF.ImageId = char(VALUE);
801 
802  elseif TAG==32995,
803  HDR.TIFF.Matteing = VALUE;
804  elseif TAG==32996,
805  HDR.TIFF.DataType = VALUE;
806  elseif TAG==32997,
807  HDR.TIFF.ImageDepth = VALUE;
808  elseif TAG==32998,
809  HDR.TIFF.TileDepth = VALUE;
810 
811  elseif TAG==33432,
812  HDR.Copyright = VALUE;
813 
814  elseif TAG==33434,
815  HDR.EXIF.ExposureTime = VALUE;
816  elseif TAG==33437,
817  HDR.EXIF.FNumber = VALUE;
818 
819  elseif TAG==33550,
820  HDR.TIFF.GEO.ModelPixelScale = VALUE;
821  elseif TAG==33922,
822  HDR.TIFF.GEO.ModelTiepoint = VALUE';
823 
824  elseif TAG==34016,
825  HDR.TIFF.IT8.Site = VALUE;
826  elseif TAG==34017,
827  HDR.TIFF.IT8.ColorSequence = VALUE;
828  elseif TAG==34018,
829  HDR.TIFF.IT8.Header = VALUE;
830  elseif TAG==34019,
831  HDR.TIFF.IT8.RasterPadding = VALUE;
832  elseif TAG==34020,
833  HDR.TIFF.IT8.BitsPerRunLength = VALUE;
834  elseif TAG==34021,
835  HDR.TIFF.IT8.BitsPerExtendedRunLength = VALUE;
836  elseif TAG==34022,
837  HDR.TIFF.IT8.ColorTable = VALUE;
838  elseif TAG==34023,
839  HDR.TIFF.IT8.ImageColorIndicator = VALUE;
840  elseif TAG==34024,
841  HDR.TIFF.IT8.BKGColorIndicator = VALUE;
842  elseif TAG==34025,
843  HDR.TIFF.IT8.ImageColorValue = VALUE;
844  elseif TAG==34026,
845  HDR.TIFF.IT8.BKGColorValue = VALUE;
846  elseif TAG==34027,
847  HDR.TIFF.IT8.PixelIntensityRange = VALUE;
848  elseif TAG==34028,
849  HDR.TIFF.IT8.TransparencyIndicator = VALUE;
850  elseif TAG==34029,
851  HDR.TIFF.IT8.ColorCharacterization = VALUE;
852  elseif TAG==34030,
853  HDR.TIFF.IT8.t34030 = VALUE;
854 
855  elseif TAG==34377,
856  HDR.TIFF.Photoshop = VALUE;
857  elseif TAG==34665,
858  HDR.TIFF.EXIF_IFD = VALUE;
859 
860  elseif TAG==34735,
861  HDR.TIFF.GEO.KeyDirectory = VALUE;
862  elseif TAG==34737,
863  HDR.TIFF.GEO.ASCII_Params = VALUE;
864 
865  elseif TAG==34850,
866  HDR.EXIF.ExposureProgram = VALUE;
867  elseif TAG==34852,
868  HDR.EXIF.SpectralSensitivity = VALUE;
869  elseif TAG==34855,
870  HDR.EXIF.ISOSpeedRating = VALUE;
871  elseif TAG==36864
872  HDR.EXIF.ExifVersion = VALUE;
873  elseif TAG==36867
874  HDR.EXIF.DateTimeOriginal = VALUE;
875  elseif TAG==36868
876  HDR.EXIF.DateTimeDigitized = VALUE;
877 
878  elseif TAG==37121
879  HDR.EXIF.ComponentsConfiguration = VALUE;
880  elseif TAG==37122
881  HDR.EXIF.CompressedBitsPerPixel = VALUE;
882  elseif TAG==37377
883  HDR.EXIF.ShutterSpeed = VALUE;
884  elseif TAG==37378
885  HDR.EXIF.Aperture = VALUE;
886  elseif TAG==37379
887  HDR.EXIF.Brightness = VALUE;
888  elseif TAG==37380
889  HDR.EXIF.ExposureBias = VALUE;
890  elseif TAG==37381
891  HDR.EXIF.MaxAperture = VALUE;
892  elseif TAG==37382
893  HDR.EXIF.SubjectDistance = VALUE;
894  elseif TAG==37383
895  HDR.EXIF.MeteringMode = VALUE;
896  elseif TAG==37384
897  HDR.EXIF.LightSource = VALUE;
898  elseif TAG==37385
899  HDR.EXIF.Flash = VALUE;
900  elseif TAG==37386
901  HDR.EXIF.FocalLength = VALUE;
902  elseif TAG==37396
903  HDR.EXIF.SubjectArea = VALUE;
904 
905  elseif TAG==37500
906  HDR.EXIF.MakerNote = VALUE;
907  elseif TAG==37510
908  HDR.EXIF.UserComment = VALUE;
909  elseif TAG==37520
910  HDR.EXIF.SubSecTime = VALUE;
911  elseif TAG==37521
912  HDR.EXIF.SubSecTimeOriginal = VALUE;
913  elseif TAG==37522
914  HDR.EXIF.SubSecTimeDigitized = VALUE;
915 
916  elseif TAG==40960
917  HDR.EXIF.FlashpixVersion = VALUE;
918  elseif TAG==40961
919  HDR.EXIF.ColorSpace = VALUE;
920  elseif TAG==40962
921  HDR.EXIF.PixelXDimension = VALUE;
922  elseif TAG==40963
923  HDR.EXIF.PixelYDimension = VALUE;
924  elseif TAG==40964
925  HDR.EXIF.RelatedSoundFile = VALUE;
926 
927  elseif TAG==41483
928  HDR.EXIF.FlashEnergy = VALUE;
929  elseif TAG==41484
930  HDR.EXIF.SpatialFrequencyResponse = VALUE;
931  elseif TAG==41486
932  HDR.EXIF.FocalPlaneXResolution = VALUE;
933  elseif TAG==41487
934  HDR.EXIF.FocalPlaneYResolution = VALUE;
935  elseif TAG==41488
936  HDR.EXIF.FocalPlaneResolutionUnit = VALUE;
937  elseif TAG==41492
938  HDR.EXIF.SubjectLocation = VALUE;
939  elseif TAG==41493
940  HDR.EXIF.ExposureIndex = VALUE;
941  elseif TAG==41495
942  HDR.EXIF.SensingMethod = VALUE;
943 
944  elseif TAG==41728
945  HDR.EXIF.FileSource = VALUE;
946  elseif TAG==41729
947  HDR.EXIF.SceneType = VALUE;
948  elseif TAG==41730
949  HDR.EXIF.CFAPattern = VALUE;
950 
951  elseif TAG==41985
952  HDR.EXIF.CustomRendered = VALUE;
953  elseif TAG==41986
954  HDR.EXIF.ExposureMode = VALUE;
955  elseif TAG==41987
956  HDR.EXIF.WhiteBalance = VALUE;
957  elseif TAG==41988
958  HDR.EXIF.DigitalZoomRatio = VALUE;
959  elseif TAG==41989
960  HDR.EXIF.FocalLengthIn35mmFilm = VALUE;
961  elseif TAG==41990
962  HDR.EXIF.SceneCaptureType = VALUE;
963  elseif TAG==41991
964  HDR.EXIF.GainControl = VALUE;
965  elseif TAG==41992
966  HDR.EXIF.Contrast = VALUE;
967  elseif TAG==41993
968  HDR.EXIF.Saturation = VALUE;
969  elseif TAG==41994
970  HDR.EXIF.Sharpness = VALUE;
971  elseif TAG==41995
972  HDR.EXIF.DeviceSettingDescription = VALUE;
973  elseif TAG==41996
974  HDR.EXIF.SubjectDistanceRange = VALUE;
975  elseif TAG==42016
976  HDR.EXIF.ImageUniqueID = VALUE;
977 
978 
979  elseif 1, %TAG<2^15,
980  fprintf(HDR.FILE.stdout,'IOPEN(TIFF): TAG %d %xH used\n',TAG,TAG)
981  else
982  end;
983  K = K + 1;
984  status = fseek(HDR.FILE.FID,POS+12+8*HDR.FLAG.BigTIFF,'bof');
985  end;
986  [OFFSET, c] = fread(HDR.FILE.FID, 1, 'uint32');
987  end;
988  HDR.GDFTYP = ['uint',int2str(HDR.Bits(1))];
989  HDR.FILE.OPEN = 1;
990 
991 
992 elseif strcmp(HDR.TYPE,'IMAGE:XBM'),
993  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'t'],'ieee-le');
994  K = 0;
995  while K<2
996  tmp = fgetl(HDR.FILE.FID);
997  if strncmp(tmp,'/*',2)
998  elseif strncmp(tmp,'#define ',7)
999  K = K+1;
1000  [t1,t2] = strtok(tmp(8:end));
1001  if strfind(tmp,'width')
1002  HDR.IMAGE.Size(2) = str2double(t2);
1003  elseif strfind(tmp,'height')
1004  HDR.IMAGE.Size(1) = str2double(t2);
1005  end
1006  end;
1007  end;
1008  t = fread(HDR.FILE.FID,[1,inf],'uchar=>uchar');
1009  fclose(HDR.FILE.FID);
1010  t(t==10)=' ';
1011  t(t==13)=' ';
1012  [tmp,t] = strtok(t,'{}');
1013  [r,t] = strtok(t,'{}');
1014  K = 0;
1015  N = repmat(NaN,ceil(HDR.IMAGE.Size([2,1])./[8,1]));
1016  data = repmat(NaN,HDR.IMAGE.Size([2,1]));
1017  while ~isempty(t)
1018  [t,r] = strtok(r,' ,');
1019  n = NaN;
1020  if strncmp(t,'0x',2)
1021  n = hex2dec(t(3:end));
1022  elseif strncmp(t,'0',1)
1023  n = base2dec(t,8);
1024  else
1025  n = str2double(t);
1026  end;
1027  if ~isnan(n) & ~isempty(n),
1028  K = K + 1;
1029  N(K) = n;
1030  end
1031  end;
1032  data = repmat(NaN,HDR.IMAGE.Size([2,1]));
1033  for k = 1:8,
1034  ix = k:8:HDR.IMAGE.Size(2);
1035  data(ix,:) = logical(bitand(N(1:length(ix),:),2^(k-1)));
1036  end
1037  data = data';
1038 
1039 
1040 elseif strcmp(HDR.TYPE,'IMAGE:XPM'),
1041  HDR.FILE.FID = fopen(HDR.FileName,[HDR.FILE.PERMISSION,'t'],'ieee-le');
1042  line = '';
1043  while ~any(line=='{'),
1044  line = fgetl(HDR.FILE.FID);
1045  end;
1046 
1047  line = fgetl(HDR.FILE.FID);
1048  [s,t]=strtok(line,char(34));
1049  [tmp,status] = str2double(s);
1050 
1051  code1 = repmat(NaN,tmp(3),1);
1052  code2 = repmat(0,256,1);
1053  Palette = repmat(NaN,tmp(3),3);
1054  HDR.IMAGE.Size = tmp([2,1]);
1055  k1 = tmp(3);
1056 
1057  for k = 1:k1,
1058  line = fgetl(HDR.FILE.FID);
1059  [s,t]= strtok(line,char(34));
1060  code1(k) = s(1);
1061  code2(s(1)+1) = k;
1062  Palette(k,:) = [hex2dec(s(6:9)),hex2dec(s(10:13)),hex2dec(s(14:17))];
1063  end;
1064  Palette = (Palette/2^16);
1065  R = Palette(:,1);
1066  G = Palette(:,2);
1067  B = Palette(:,3);
1068  HDR.Code1 = code1;
1069  HDR.Code2 = code2;
1070  HDR.IMAGE.Palette = Palette;
1071 
1072  data = repmat(NaN,[HDR.IMAGE.Size]);
1073  for k = 1:HDR.IMAGE.Size(1),
1074  line = fgetl(HDR.FILE.FID);
1075  [s,t]= strtok(line,char(34));
1076  data(k,:) = abs(s);
1077  end;
1078  fclose(HDR.FILE.FID);
1079  data(:,:,1) = code2(data+1);
1080 
1081  data(:,:,3) = B(data(:,:,1));
1082  data(:,:,2) = G(data(:,:,1));
1083  data(:,:,1) = R(data(:,:,1));
1084 
1085 end;
str2double
function str2double(in s, in cdelim, in rdelim, in ddelim)
getfiletype
function getfiletype(in arg1)
iopen
function iopen(in HDR, in PERMISSION, in CHAN, in MODE, in arg5, in arg6)