Visual Servoing Platform  version 3.6.1 under development (2024-02-13)
testImageOwnership.cpp
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See https://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Test vpImage ownership
33  *
34 *****************************************************************************/
35 
36 #include <visp3/core/vpImage.h>
37 
44 int main(int /* argc */, const char ** /* argv */)
45 {
46  try {
47  {
48  unsigned char bitmap[4];
49  bitmap[0] = 0;
50  bitmap[1] = 1;
51  bitmap[2] = 2;
52  bitmap[3] = 3;
53 
54  vpImage<unsigned char> I(bitmap, 2, 2, true);
55  std::cout << "I:\n" << I << std::endl;
56  I.destroy();
57  }
58  {
59  unsigned char bitmap[4];
60  bitmap[0] = 0;
61  bitmap[1] = 1;
62  bitmap[2] = 2;
63  bitmap[3] = 3;
64 
65  vpImage<unsigned char> I(bitmap, 2, 2, false);
66  std::cout << "\nI:\n" << I << std::endl;
67  }
68  {
69  unsigned char bitmap[4];
70  bitmap[0] = 0;
71  bitmap[1] = 1;
72  bitmap[2] = 2;
73  bitmap[3] = 3;
74 
75  vpImage<unsigned char> I(bitmap, 2, 2, false);
76  {
78  std::cout << "\nI2:\n" << I2 << std::endl;
79  }
80  {
82  std::cout << "I2:\n" << I2 << std::endl;
83  }
84  }
85  {
86  unsigned char bitmap[12];
87  for (unsigned char i = 0; i < 12; i++) {
88  bitmap[i] = i;
89  }
90 
91  vpImage<unsigned char> I(bitmap, 3, 4, false);
92  std::cout << "\nI:\n" << I << std::endl;
93  I.init(2, 2, 0);
94  std::cout << "I:\n" << I << std::endl;
95  }
96  {
97  unsigned char bitmap[12];
98  for (unsigned char i = 0; i < 12; i++) {
99  bitmap[i] = i;
100  }
101  vpImage<unsigned char> I(bitmap, 3, 4, false);
102  std::cout << "\nI:\n" << I << std::endl;
103  I.init(bitmap, 4, 3, true);
104  std::cout << "I:\n" << I << std::endl;
105  }
106  {
107  unsigned char *bitmap = new unsigned char[12];
108  {
109  vpImage<unsigned char> I(bitmap, 3, 4, true);
110  }
111  delete[] bitmap;
112  }
113  {
114  unsigned char *bitmap = new unsigned char[12];
115  {
116  vpImage<unsigned char> I(bitmap, 3, 4, false);
117  }
118  vpImage<unsigned char> I(bitmap, 3, 4, false);
119 
120  delete[] bitmap;
121 
122  bitmap = new unsigned char[16];
123  I.init(bitmap, 4, 4, false);
124 
125  delete[] bitmap;
126  }
127  {
128  unsigned char *bitmap = new unsigned char[12];
129  vpImage<unsigned char> I(bitmap, 3, 4, false);
130  I.destroy();
131  I.init(bitmap, 3, 4, false);
132 
133  delete[] bitmap;
134 
135  I.destroy();
136  bitmap = new unsigned char[16];
137  I.init(bitmap, 4, 4, false);
138 
139  delete[] bitmap;
140  }
141 
142 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
143  {
144  unsigned char *bitmap = new unsigned char[12];
145  vpImage<unsigned char> I = std::move(vpImage<unsigned char>(bitmap, 3, 4, false));
146  if (bitmap != I.bitmap) {
147  std::cout << "std::move(vpImage) failed" << std::endl;
148  return EXIT_FAILURE;
149  }
150  delete[] bitmap;
151  }
152  {
153  unsigned char *bitmap = new unsigned char[12];
154  vpImage<unsigned char> I(std::move(vpImage<unsigned char>(bitmap, 3, 4, false)));
155  if (bitmap != I.bitmap) {
156  std::cout << "vpImage(td::move(vpImage)) failed" << std::endl;
157  return EXIT_FAILURE;
158  }
159  delete[] bitmap;
160  }
161 #endif
162  }
163  catch (const std::exception &e) {
164  std::cerr << "Exception: " << e.what() << std::endl;
165  return EXIT_FAILURE;
166  }
167 
168  std::cout << "Test succeed" << std::endl;
169  return EXIT_SUCCESS;
170 }
void destroy()
Destructor : Memory de-allocation.
Definition: vpImage.h:809
void init(unsigned int height, unsigned int width)
Set the size of the image.
Definition: vpImage.h:628
Type * bitmap
points toward the bitmap
Definition: vpImage.h:139