rawread.m
上传用户:zlding2008
上传日期:2013-05-13
资源大小:1914k
文件大小:3k
源码类别:

2D图形编程

开发平台:

Matlab

  1. function [X,map] = rawread(filename,n,m);
  2. % RAWREAD Read a Portable Bitmap file, or a raw file.
  3. %       RAWREAD('imagefile.raw', xsize, ysize) reads a "raw" image file
  4. %       RAWREAD('imagefile.pgm') reads a "pgm" (portable gray map) image
  5. %       [X,map] = RAWREAD('imagefile.raw') returns both the image and a
  6. %       color map, so that
  7. %               [X,map] = rawread('imagefile.raw',sx,sy);
  8. %       or      [X,map] = rawread('imagefile.pgm');
  9. %               image(X)
  10. %               colormap(map)
  11. %       will display the result with the proper colors.
  12. %
  13. %       NOTE : map is optional and could be replaced during the display by
  14. %              the "colormap('gray')" command
  15. %
  16. %       See also IMWRITE, IMREAD, IMAGE, COLORMAP.
  17. dot = max(find(filename == '.'));
  18. suffix = filename(dot+1:dot+3);
  19. if strcmp(suffix,'pgm') | strcmp(suffix,'raw')
  20.    disp(sprintf('nopens %s filen',filename));
  21.    fp = fopen(filename,'rb','b');  % "Big-endian" byte order.
  22.    
  23.    if (fp<0)
  24.       error(['Cannot open ' filename '.']);
  25.    end
  26.    if strcmp(suffix,'pgm')
  27.    % Read and crack the header
  28.    
  29.       head = fread(fp,2,'uchar'); % pgm magic number : P5
  30.       if ~strcmp(head,'P5'),
  31.          fprintf(1,'n Magic Number : %sn',head);
  32.       else
  33.          fprintf(1,'n Bad Magic Number : %sn',head);
  34.          error('cannot continue this way, good bye cruel world');
  35.       end
  36.       c = fread(fp,1,'uchar'); %reads the carriage return separating P5 from the creator
  37.       precreator = fread(fp,1,'uchar'); % look for a '#' character preceeding a creator signature
  38.       if precreator == '#',
  39.          c = setstr(20);  % any character except carriage return
  40.          cr = setstr(10); % defines a carriage return
  41.          while c ~= cr,
  42.                c = fread(fp,1,'uchar');
  43.                if ( exist( 'creator' )==0)
  44.                  creator = c;
  45.                 else
  46.                  creator = [creator,c];
  47.                end;
  48.          end;
  49.          fprintf(1,'n creator : %sn',creator);
  50.       else
  51.          fprintf('n No creator signaturen');
  52.          fseek(fp,-1,'cof'); % return one char before
  53.       end;
  54. end
  55.    if nargin <2,
  56.       if strcmp(suffix,'raw')
  57.       % assume image size is 256x256
  58.          disp('RAW file without size : assume image size is 256x256');
  59.          n = 256;
  60.          m = 256;
  61.       else % for PGM files
  62.       % reads the size and depth
  63.           disp(' reads sizes');
  64.           n = fscanf(fp,'%d',1);
  65.           tn = num2str(n);
  66.           disp(['  xsize = ' tn]);
  67.           m = fscanf(fp,'%d',1);
  68.           tm = num2str(m);
  69.           disp(['  ysize = ' tm]);
  70.           p = fscanf(fp,'%d',1);
  71.           tp = num2str(p);
  72.           disp(['  depth = ' tp]);
  73.           c = fread(fp,1,'uchar'); %reads the last carriage return
  74.       end;
  75.    end
  76.    % Creates a gray palette and scale it to [0,1].
  77.    disp(' create gray palette');
  78.    for i=1:256,
  79.        map(i,[1:3])=[i/256,i/256,i/256];
  80.    end;
  81.    
  82.   
  83.    % Read the image
  84.    disp(' Reads image data ...');
  85.    [X,l] = fread(fp,[n,m],'uchar');
  86.    if l ~= m*n, l, error('HSI image file is wrong length'), end
  87.    % Image elements are colormap indices, so start at 1.
  88.    X = X'+1;
  89.    
  90.    fclose(fp);
  91.    
  92.    disp('end');
  93. else
  94.    error('Image file name must end in ''raw'' or ''pgm''.')
  95. end