rawread.m
资源名称:Snakes.rar [点击查看]
上传用户:zlding2008
上传日期:2013-05-13
资源大小:1914k
文件大小:3k
源码类别:
2D图形编程
开发平台:
Matlab
- function [X,map] = rawread(filename,n,m);
- % RAWREAD Read a Portable Bitmap file, or a raw file.
- % RAWREAD('imagefile.raw', xsize, ysize) reads a "raw" image file
- % RAWREAD('imagefile.pgm') reads a "pgm" (portable gray map) image
- % [X,map] = RAWREAD('imagefile.raw') returns both the image and a
- % color map, so that
- % [X,map] = rawread('imagefile.raw',sx,sy);
- % or [X,map] = rawread('imagefile.pgm');
- % image(X)
- % colormap(map)
- % will display the result with the proper colors.
- %
- % NOTE : map is optional and could be replaced during the display by
- % the "colormap('gray')" command
- %
- % See also IMWRITE, IMREAD, IMAGE, COLORMAP.
- dot = max(find(filename == '.'));
- suffix = filename(dot+1:dot+3);
- if strcmp(suffix,'pgm') | strcmp(suffix,'raw')
- disp(sprintf('nopens %s filen',filename));
- fp = fopen(filename,'rb','b'); % "Big-endian" byte order.
- if (fp<0)
- error(['Cannot open ' filename '.']);
- end
- if strcmp(suffix,'pgm')
- % Read and crack the header
- head = fread(fp,2,'uchar'); % pgm magic number : P5
- if ~strcmp(head,'P5'),
- fprintf(1,'n Magic Number : %sn',head);
- else
- fprintf(1,'n Bad Magic Number : %sn',head);
- error('cannot continue this way, good bye cruel world');
- end
- c = fread(fp,1,'uchar'); %reads the carriage return separating P5 from the creator
- precreator = fread(fp,1,'uchar'); % look for a '#' character preceeding a creator signature
- if precreator == '#',
- c = setstr(20); % any character except carriage return
- cr = setstr(10); % defines a carriage return
- while c ~= cr,
- c = fread(fp,1,'uchar');
- if ( exist( 'creator' )==0)
- creator = c;
- else
- creator = [creator,c];
- end;
- end;
- fprintf(1,'n creator : %sn',creator);
- else
- fprintf('n No creator signaturen');
- fseek(fp,-1,'cof'); % return one char before
- end;
- end
- if nargin <2,
- if strcmp(suffix,'raw')
- % assume image size is 256x256
- disp('RAW file without size : assume image size is 256x256');
- n = 256;
- m = 256;
- else % for PGM files
- % reads the size and depth
- disp(' reads sizes');
- n = fscanf(fp,'%d',1);
- tn = num2str(n);
- disp([' xsize = ' tn]);
- m = fscanf(fp,'%d',1);
- tm = num2str(m);
- disp([' ysize = ' tm]);
- p = fscanf(fp,'%d',1);
- tp = num2str(p);
- disp([' depth = ' tp]);
- c = fread(fp,1,'uchar'); %reads the last carriage return
- end;
- end
- % Creates a gray palette and scale it to [0,1].
- disp(' create gray palette');
- for i=1:256,
- map(i,[1:3])=[i/256,i/256,i/256];
- end;
- % Read the image
- disp(' Reads image data ...');
- [X,l] = fread(fp,[n,m],'uchar');
- if l ~= m*n, l, error('HSI image file is wrong length'), end
- % Image elements are colormap indices, so start at 1.
- X = X'+1;
- fclose(fp);
- disp('end');
- else
- error('Image file name must end in ''raw'' or ''pgm''.')
- end