@@ -73,10 +73,18 @@ function processCurrentPosition(obj)
7373
7474 if ~isempty(obj .PreviousPoint )
7575 % mouse moved from a previous position
76- drawBrushLine(obj , coord , obj .PreviousPoint , iz , ic , it );
76+ if isScalarImage(img )
77+ drawBrushLine(obj , coord , obj .PreviousPoint , iz , ic , it );
78+ else
79+ drawColorBrushLine(obj , coord , obj .PreviousPoint , iz , it );
80+ end
7781 else
7882 % respond to mouse button pressed, mouse hasn't moved yet
79- drawBrush(obj , coord , iz , ic , it );
83+ if isScalarImage(img )
84+ drawBrush(obj , coord , iz , ic , it );
85+ else
86+ drawColorBrush(obj , coord , iz , it );
87+ end
8088 end
8189
8290 obj.PreviousPoint = coord ;
@@ -106,6 +114,15 @@ function drawBrushLine(obj, coord1, coord2, iz, ic, it)
106114 end
107115 end
108116
117+ function drawColorBrushLine(obj , coord1 , coord2 , iz , it )
118+ [x , y ] = imagem .tools .Brush .intline(coord1(1 ), coord1(2 ), coord2(1 ), coord2(2 ));
119+
120+ % iterate on current line
121+ for i = 1 : length(x )
122+ drawColorBrush(obj , [x(i ) y(i )], iz , it );
123+ end
124+ end
125+
109126 function drawBrush(obj , coord , iz , ic , it )
110127 doc = obj .Viewer .Doc ;
111128
@@ -120,14 +137,37 @@ function drawBrush(obj, coord, iz, ic, it)
120137 y1 = max(coord(2 )-bs1 , 1 );
121138 x2 = min(coord(1 )+bs2 , dim(1 ));
122139 y2 = min(coord(2 )+bs2 , dim(2 ));
123-
140+
124141 % iterate on brush pixels
125142 for ix = x1 : x2
126143 for iy = y1 : y2
127144 doc .Image .Data(ix , iy , iz , ic , it ) = obj .Viewer .Gui .App .BrushValue ;
128145 end
129146 end
130147 end
148+
149+ function drawColorBrush(obj , coord , iz , it )
150+ doc = obj .Viewer .Doc ;
151+
152+ % brush size in each direction
153+ bs = obj .Viewer .Gui .App .BrushSize ;
154+ bs1 = floor((bs - 1 ) / 2 );
155+ bs2 = ceil((bs - 1 ) / 2 );
156+
157+ % compute bounds
158+ dim = size(doc .Image );
159+ x1 = max(coord(1 )-bs1 , 1 );
160+ y1 = max(coord(2 )-bs1 , 1 );
161+ x2 = min(coord(1 )+bs2 , dim(1 ));
162+ y2 = min(coord(2 )+bs2 , dim(2 ));
163+
164+ % iterate on brush pixels
165+ for ix = x1 : x2
166+ for iy = y1 : y2
167+ doc .Image .Data(ix , iy , iz , : , it ) = obj .Viewer .Gui .App .BrushColor ;
168+ end
169+ end
170+ end
131171end % methods
132172
133173methods (Static , Access = private )
0 commit comments