rawread.asv
上传用户: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(
  44.                creator = [creator,c];
  45.          end;
  46.          fprintf(1,'n creator : %sn',creator);
  47.       else
  48.          fprintf('n No creator signaturen');
  49.          fseek(fp,-1,'cof'); % return one char before
  50.       end;
  51. end
  52.    if nargin <2,
  53.       if strcmp(suffix,'raw')
  54.       % assume image size is 256x256
  55.          disp('RAW file without size : assume image size is 256x256');
  56.          n = 256;
  57.          m = 256;
  58.       else % for PGM files
  59.       % reads the size and depth
  60.           disp(' reads sizes');
  61.           n = fscanf(fp,'%d',1);
  62.           tn = num2str(n);
  63.           disp(['  xsize = ' tn]);
  64.           m = fscanf(fp,'%d',1);
  65.           tm = num2str(m);
  66.           disp(['  ysize = ' tm]);
  67.           p = fscanf(fp,'%d',1);
  68.           tp = num2str(p);
  69.           disp(['  depth = ' tp]);
  70.           c = fread(fp,1,'uchar'); %reads the last carriage return
  71.       end;
  72.    end
  73.    % Creates a gray palette and scale it to [0,1].
  74.    disp(' create gray palette');
  75.    for i=1:256,
  76.        map(i,[1:3])=[i/256,i/256,i/256];
  77.    end;
  78.    
  79.   
  80.    % Read the image
  81.    disp(' Reads image data ...');
  82.    [X,l] = fread(fp,[n,m],'uchar');
  83.    if l ~= m*n, l, error('HSI image file is wrong length'), end
  84.    % Image elements are colormap indices, so start at 1.
  85.    X = X'+1;
  86.    
  87.    fclose(fp);
  88.    
  89.    disp('end');
  90. else
  91.    error('Image file name must end in ''raw'' or ''pgm''.')
  92. end