160 lines
4.5 KiB
Matlab
160 lines
4.5 KiB
Matlab
%Bitmap class
|
|
%
|
|
%Implements a class to manage bitmap images without the need for the
|
|
%various conversion and display functions
|
|
%
|
|
%Available functions:
|
|
%
|
|
%fill(obj,color)
|
|
%setPixel(obj,pixel,color)
|
|
%getPixel(obj,pixel,[optional: color channel])
|
|
%display(obj)
|
|
%disp(obj)
|
|
%plot(obj)
|
|
%image(obj)
|
|
%save(obj)
|
|
%open(obj)
|
|
|
|
classdef Bitmap
|
|
|
|
%% Public Properties
|
|
properties
|
|
|
|
%Channel arrays
|
|
red;
|
|
green;
|
|
blue;
|
|
|
|
end
|
|
|
|
%% Public Methods
|
|
methods
|
|
|
|
%Creates image and defaults it to black
|
|
function obj = Bitmap(width,height)
|
|
obj.red = zeros(height,width,'uint8');
|
|
obj.green = zeros(height,width,'uint8');
|
|
obj.blue = zeros(height,width,'uint8');
|
|
end % End Bitmap Constructor
|
|
|
|
%Fill the image with a specified color
|
|
%color = [red green blue] max for each is 255
|
|
function fill(obj,color)
|
|
obj.red(:,:) = color(1);
|
|
obj.green(:,:) = color(2);
|
|
obj.blue(:,:) = color(3);
|
|
assignin('caller',inputname(1),obj); %saves the changes to the object
|
|
end
|
|
|
|
%Set a pixel to a specified color
|
|
%pixel = [x y]
|
|
%color = [red green blue]
|
|
function setPixel(obj,pixel,color)
|
|
obj.red(pixel(2),pixel(1)) = color(1);
|
|
obj.green(pixel(2),pixel(1)) = color(2);
|
|
obj.blue(pixel(2),pixel(1)) = color(3);
|
|
assignin('caller',inputname(1),obj); %saves the changes to the object
|
|
end
|
|
|
|
%Get pixel color
|
|
%pixel = [x y]
|
|
%varargin can be:
|
|
% no input for all channels
|
|
% 'r' or 'red' for red channel
|
|
% 'g' or 'green' for green channel
|
|
% 'b' or 'blue' for blue channel
|
|
function color = getPixel(obj,pixel,varargin)
|
|
|
|
if( ~isempty(varargin) )
|
|
switch (varargin{1})
|
|
case {'r','red'}
|
|
color = obj.red(pixel(2),pixel(1));
|
|
case {'g','green'}
|
|
color = obj.red(pixel(2),pixel(1));
|
|
case {'b','blue'}
|
|
color = obj.red(pixel(2),pixel(1));
|
|
end
|
|
else
|
|
color = [obj.red(pixel(2),pixel(1)) obj.green(pixel(2),pixel(1)) obj.blue(pixel(2),pixel(1))];
|
|
end
|
|
|
|
end
|
|
|
|
%Display the image
|
|
%varargin can be:
|
|
% no input for all channels
|
|
% 'r' or 'red' for red channel
|
|
% 'g' or 'green' for green channel
|
|
% 'b' or 'blue' for blue channel
|
|
function display(obj,varargin)
|
|
|
|
if( ~isempty(varargin) )
|
|
switch (varargin{1})
|
|
case {'r','red'}
|
|
image(obj.red)
|
|
case {'g','green'}
|
|
image(obj.green)
|
|
case {'b','blue'}
|
|
image(obj.blue)
|
|
end
|
|
|
|
colormap bone;
|
|
else
|
|
bitmap = cat(3,obj.red,obj.green,obj.blue);
|
|
image(bitmap);
|
|
end
|
|
end
|
|
|
|
%Overload several commonly used display functions
|
|
function disp(obj,varargin)
|
|
display(obj,varargin{:});
|
|
end
|
|
|
|
function plot(obj,varargin)
|
|
display(obj,varargin{:});
|
|
end
|
|
|
|
function image(obj,varargin)
|
|
display(obj,varargin{:});
|
|
end
|
|
|
|
%Saves the image
|
|
function save(obj)
|
|
|
|
%Open file dialogue
|
|
[fileName,pathName,success] = uiputfile({'*.bmp','Bitmap Image (*.bmp)'},'Save Bitmap As');
|
|
|
|
if( not(success == 0) )
|
|
imwrite(cat(3,obj.red,obj.green,obj.blue),[pathName fileName],'bmp'); %Write image file to disk
|
|
disp('Save Complete');
|
|
end
|
|
end
|
|
|
|
%Opens an image and overwrites what is currently stored
|
|
function success = open(obj)
|
|
|
|
%Open file dialogue
|
|
[fileName,pathName,success] = uigetfile({'*.bmp','Bitmap Image (*.bmp)'},'Open Bitmap ');
|
|
|
|
if( not(success == 0) )
|
|
|
|
channels = imread([pathName fileName], 'bmp'); %returns color indexed data
|
|
|
|
%Store each channel
|
|
obj.red = channels(:,:,1);
|
|
obj.green = channels(:,:,2);
|
|
obj.blue = channels(:,:,3);
|
|
|
|
assignin('caller',inputname(1),obj); %saves the changes to the object
|
|
success = true;
|
|
return
|
|
else
|
|
success = false;
|
|
return
|
|
end
|
|
end
|
|
|
|
|
|
end %methods
|
|
end %classdef
|