IVT
BitmapCapture.cpp
Go to the documentation of this file.
1 // ****************************************************************************
2 // This file is part of the Integrating Vision Toolkit (IVT).
3 //
4 // The IVT is maintained by the Karlsruhe Institute of Technology (KIT)
5 // (www.kit.edu) in cooperation with the company Keyetech (www.keyetech.de).
6 //
7 // Copyright (C) 2014 Karlsruhe Institute of Technology (KIT).
8 // All rights reserved.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are met:
12 //
13 // 1. Redistributions of source code must retain the above copyright
14 // notice, this list of conditions and the following disclaimer.
15 //
16 // 2. Redistributions in binary form must reproduce the above copyright
17 // notice, this list of conditions and the following disclaimer in the
18 // documentation and/or other materials provided with the distribution.
19 //
20 // 3. Neither the name of the KIT nor the names of its contributors may be
21 // used to endorse or promote products derived from this software
22 // without specific prior written permission.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE KIT AND CONTRIBUTORS “AS IS” AND ANY
25 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 // DISCLAIMED. IN NO EVENT SHALL THE KIT OR CONTRIBUTORS BE LIABLE FOR ANY
28 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 // ****************************************************************************
35 // ****************************************************************************
36 // Filename: BitmapCapture.cpp
37 // Author: Pedram Azad
38 // Date: 2005
39 // ****************************************************************************
40 
41 
42 // ****************************************************************************
43 // Includes
44 // ****************************************************************************
45 
46 #include <new> // for explicitly using correct new/delete operators on VC DSPs
47 
48 #include "BitmapCapture.h"
49 
50 #include "Image/ImageProcessor.h"
51 #include "Image/ByteImage.h"
52 
53 
54 
55 // ****************************************************************************
56 // Constructor / Destructor
57 // ****************************************************************************
58 
59 CBitmapCapture::CBitmapCapture(const char *pFilePath, const char *pSecondFilePath)
60 {
61  m_sFilePath = "";
62  m_sFilePath += pFilePath;
63 
64  m_sSecondFilePath = "";
65  m_pLeftImage = new CByteImage();
66 
67  if (pSecondFilePath)
68  {
69  m_sSecondFilePath += pSecondFilePath;
70  m_bStereo = true;
71  m_pRightImage = new CByteImage();
72  }
73  else
74  {
75  m_pRightImage = 0;
76  m_bStereo = false;
77  }
78 
79  m_pLeftImageRGB24Split = 0;
80  m_pRightImageRGB24Split = 0;
81 
82  m_bOK = false;
83 }
84 
86 {
87  if (m_pLeftImage)
88  delete m_pLeftImage;
89 
90  if (m_pRightImage)
91  delete m_pRightImage;
92 
93  if (m_pLeftImageRGB24Split)
94  delete m_pLeftImageRGB24Split;
95 
96  if (m_pRightImageRGB24Split)
97  delete m_pRightImageRGB24Split;
98 }
99 
100 
101 // ****************************************************************************
102 // Methods
103 // ****************************************************************************
104 
106 {
107  return m_bOK ? m_pLeftImage->width : -1;
108 }
109 
111 {
112  return m_bOK ? m_pLeftImage->height : -1;
113 }
114 
116 {
117  return m_bOK ? m_pLeftImage->type : (CByteImage::ImageType) -1;
118 }
119 
120 
122 {
123  m_bOK = false;
124 
125  if (!m_pLeftImage->LoadFromFile(m_sFilePath.c_str()))
126  return false;
127 
128  if (m_pLeftImage->type == CByteImage::eRGB24)
129  {
130  if (m_pLeftImageRGB24Split)
131  delete m_pLeftImageRGB24Split;
132 
133  m_pLeftImageRGB24Split = new CByteImage(m_pLeftImage->width, m_pLeftImage->height, CByteImage::eRGB24Split);
134  ImageProcessor::ConvertImage(m_pLeftImage, m_pLeftImageRGB24Split);
135  }
136 
137  if (m_bStereo)
138  {
139  if (!m_pRightImage->LoadFromFile(m_sSecondFilePath.c_str()))
140  return false;
141 
142  if (m_pLeftImage->width != m_pRightImage->width || m_pLeftImage->height != m_pRightImage->height)
143  return false;
144 
145  if (m_pRightImage->type == CByteImage::eRGB24)
146  {
147  if (m_pRightImageRGB24Split)
148  delete m_pRightImageRGB24Split;
149 
150  m_pRightImageRGB24Split = new CByteImage(m_pRightImage->width, m_pRightImage->height, CByteImage::eRGB24Split);
151  ImageProcessor::ConvertImage(m_pRightImage, m_pRightImageRGB24Split);
152  }
153  }
154 
155  m_bOK = true;
156 
157  return true;
158 }
159 
161 {
162 }
163 
165 {
166  if (!m_bOK)
167  return false;
168 
169  if (ppImages[0]->IsCompatible(m_pLeftImage))
170  ImageProcessor::CopyImage(m_pLeftImage, ppImages[0]);
171  else if (ppImages[0]->IsCompatible(m_pLeftImageRGB24Split))
172  ImageProcessor::CopyImage(m_pLeftImageRGB24Split, ppImages[0]);
173  else
174  {
175  printf("error: images are not compatible in CBitmapCapture::CaptureImage\n");
176  return false;
177  }
178 
179  if (m_bStereo)
180  {
181  if (ppImages[1]->IsCompatible(m_pRightImage))
182  ImageProcessor::CopyImage(m_pRightImage, ppImages[1]);
183  else if (ppImages[1]->IsCompatible(m_pRightImageRGB24Split))
184  ImageProcessor::CopyImage(m_pRightImageRGB24Split, ppImages[1]);
185  else
186  {
187  printf("error: images are not compatible in CBitmapCapture::CaptureImage\n");
188  return false;
189  }
190  }
191 
192  return true;
193 }
bool CopyImage(const CByteImage *pInputImage, CByteImage *pOutputImage, const MyRegion *pROI=0, bool bUseSameSize=false)
Copies one CByteImage to another.
ImageType
Enum specifying the supported image types.
Definition: ByteImage.h:86
bool LoadFromFile(const char *pFileName)
Loads an image from a file.
Definition: ByteImage.cpp:232
bool ConvertImage(const CByteImage *pInputImage, CByteImage *pOutputImage, bool bFast=false, const MyRegion *pROI=0)
Converts a grayscale CByteImage to an RGB CByteImage image and vice versa.
CByteImage::ImageType GetType()
CBitmapCapture(const char *pFilePath, const char *pSecondFilePath=NULL)
ImageType type
The type of the image.
Definition: ByteImage.h:292
int width
The width of the image in pixels.
Definition: ByteImage.h:257
int height
The height of the image in pixels.
Definition: ByteImage.h:264
bool CaptureImage(CByteImage **ppImages)
Data structure for the representation of 8-bit grayscale images and 24-bit RGB (or HSV) color images ...
Definition: ByteImage.h:80