KSquare Utilities
MorphOpMaskExclude.cpp
Go to the documentation of this file.
1 /* MorphOpMaskExclude.cpp -- Used to exclude specified region.
2  * Copyright (C) 1994-2014 Kurt Kramer
3  * For conditions of distribution and use, see copyright notice in KKB.h
4  */
5 
6 #include "FirstIncludes.h"
7 #include <stdlib.h>
8 #include <iostream>
9 #include <map>
10 #include <vector>
11 
12 #include "MemoryDebug.h"
13 using namespace std;
14 
15 #include "MorphOp.h"
17 #include "Raster.h"
18 using namespace KKB;
19 
20 
21 
23  MorphOp (),
24  mask (_mask)
25 {
26 }
27 
28 
29 
31 {
32 }
33 
34 
35 
37 {
38  kkint32 result = sizeof (*this);
39  return result;
40 }
41 
42 
43 
44 RasterPtr MorphOpMaskExclude::PerformOperation (RasterConstPtr _image)
45 {
46  SetSrcRaster (_image);
47 
48  kkint32 totalPixels = srcHeight * srcWidth;
49 
50  RasterPtr maskImage = new Raster (*_image);
51 
52  maskImage->Opening ((KKB::MaskTypes)mask);
53  //maskImage->ConnectedComponent();
54  maskImage->Dilation ((KKB::MaskTypes)mask);
55 
56  RasterPtr result = new Raster (srcHeight, srcWidth, srcColor);
57 
58  uchar const* srcImageRedPtr = srcRedArea;
59  uchar const* srcImageGreenPtr = srcGreenArea;
60  uchar const* srcImageBluePtr = srcBlueArea;
61 
62  uchar* resultRedPtr = result->RedArea ();
63  uchar* resultGreenPtr = result->GreenArea ();
64  uchar* resultBluePtr = result->BlueArea ();
65 
66  uchar* maskPtr = maskImage->GreenArea ();
67  for (kkint32 x = 0; x < totalPixels; ++x)
68  {
69  if (*maskPtr == 0)
70  {
71  *resultGreenPtr = *srcImageGreenPtr;
72  if (srcColor)
73  {
74  *resultRedPtr = *srcImageRedPtr;
75  *resultBluePtr = *srcImageBluePtr;
76  }
77  }
78  ++maskPtr;
79  ++srcImageGreenPtr;
80  ++resultGreenPtr;
81  if (srcColor)
82  {
83  ++srcImageRedPtr;
84  ++resultRedPtr;
85  ++srcImageBluePtr;
86  ++resultBluePtr;
87  }
88  }
89 
90  delete maskImage;
91  maskImage = NULL;
92 
93  return result;
94 } /* PerformOperation */
virtual RasterPtr PerformOperation(RasterConstPtr _image)
void SetSrcRaster(RasterConstPtr _srcRaster)
Definition: MorphOp.cpp:149
__int32 kkint32
Definition: KKBaseTypes.h:88
A class that is used by to represent a single image in memory.
Definition: Raster.h:108
bool srcColor
Definition: MorphOp.h:122
kkint32 srcHeight
Definition: MorphOp.h:123
KKTHread * KKTHreadPtr
MorphOpMaskExclude(MaskTypes _mask)
kkint32 srcWidth
Definition: MorphOp.h:124
void Dilation(MaskTypes mask)
Definition: Raster.cpp:1755
uchar const * srcBlueArea
Definition: MorphOp.h:116
unsigned char uchar
Unsigned character.
Definition: KKBaseTypes.h:77
uchar * RedArea() const
Definition: Raster.h:329
Raster(kkint32 _height, kkint32 _width, bool _color)
Constructs a blank image with given dimensions.
Definition: Raster.cpp:356
uchar * GreenArea() const
Definition: Raster.h:330
uchar * BlueArea() const
Definition: Raster.h:331
uchar const * srcGreenArea
Definition: MorphOp.h:115
Base class for all Morphological operations.
Definition: MorphOp.h:44
Raster(const Raster &_raster)
Copy Constructor.
Definition: Raster.cpp:460
void Opening(MaskTypes mask)
Definition: Raster.cpp:2952
uchar const * srcRedArea
Definition: MorphOp.h:114