Visual Servoing Platform  version 3.6.1 under development (2024-06-18)
vpDisplay.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  * Image display.
33  *
34 *****************************************************************************/
35 
41 #include <visp3/core/vpDisplay.h>
42 #include <visp3/core/vpDisplayException.h>
43 #include <visp3/core/vpImageConvert.h>
44 
45 #include <visp3/core/vpMath.h>
46 #include <visp3/core/vpMeterPixelConversion.h>
47 #include <visp3/core/vpPoint.h>
48 
54  : m_displayHasBeenInitialized(false), m_windowXPosition(0), m_windowYPosition(0), m_width(0), m_height(0), m_title(),
55  m_scale(1), m_scaleType(SCALE_DEFAULT)
56 { }
57 
62  : m_displayHasBeenInitialized(d.m_displayHasBeenInitialized), m_windowXPosition(d.m_windowXPosition),
63  m_windowYPosition(d.m_windowYPosition), m_width(d.m_width), m_height(d.m_height), m_title(d.m_title),
64  m_scale(d.m_scale), m_scaleType(d.m_scaleType)
65 { }
66 
71 
138 {
139  if (Isrc.display != nullptr) {
140  (Isrc.display)->getImage(Idest);
141  }
142  else {
143  vpImageConvert::convert(Isrc, Idest);
144  }
145 }
146 
212 {
213  if (Isrc.display != nullptr) {
214  (Isrc.display)->getImage(Idest);
215  }
216  else {
217  Idest = Isrc;
218  }
219 }
220 
226 void vpDisplay::setDownScalingFactor(unsigned int scale)
227 {
229  m_scale = scale;
230  }
231  else {
232  std::cout << "Warning: Cannot apply the down scaling factor " << scale
233  << " to the display window since the display is initialized yet..." << std::endl;
234  }
235 }
236 
242 unsigned int vpDisplay::computeAutoScale(unsigned int width, unsigned int height)
243 {
244  unsigned int screen_width, screen_height;
245  getScreenSize(screen_width, screen_height);
246  double wscale = std::max<double>(1., ceil((2. * static_cast<double>(width)) / static_cast<double>(screen_width)));
247  double hscale = std::max<double>(1., ceil((2. * static_cast<double>(height)) / static_cast<double>(screen_height)));
248  unsigned int scale = std::max<unsigned int>(1u, std::max<unsigned int>(static_cast<unsigned int>(wscale), static_cast<unsigned int>(hscale)));
249  return scale;
250 }
251 
255 void vpDisplay::setScale(vpScaleType scaleType, unsigned int width, unsigned int height)
256 {
257  switch (scaleType) {
259  setDownScalingFactor(computeAutoScale(width, height));
260  break;
262  case vpDisplay::SCALE_1:
263  break;
264  case vpDisplay::SCALE_2:
266  break;
267  case vpDisplay::SCALE_3:
269  break;
270  case vpDisplay::SCALE_4:
272  break;
273  case vpDisplay::SCALE_5:
275  break;
276  case vpDisplay::SCALE_6:
278  break;
279  case vpDisplay::SCALE_7:
281  break;
282  case vpDisplay::SCALE_8:
284  break;
285  case vpDisplay::SCALE_9:
287  break;
288  case vpDisplay::SCALE_10:
290  break;
291  default:
292  {
293  std::cout << "undefined scaleType" << std::endl;
294  }
295  }
296 }
297 
325 {
327  m_scaleType = scaleType;
328  }
329 }
Class that defines generic functionalities for display.
Definition: vpDisplay.h:174
vpScaleType m_scaleType
Definition: vpDisplay.h:925
virtual void setDownScalingFactor(unsigned int scale)
Definition: vpDisplay.cpp:226
virtual ~vpDisplay()
Definition: vpDisplay.cpp:70
static void getImage(const vpImage< unsigned char > &Is, vpImage< vpRGBa > &Id)
Definition: vpDisplay.cpp:137
unsigned int m_scale
Definition: vpDisplay.h:924
@ SCALE_AUTO
Definition: vpDisplay.h:180
@ SCALE_DEFAULT
Definition: vpDisplay.h:201
bool m_displayHasBeenInitialized
display has been initialized
Definition: vpDisplay.h:916
unsigned int computeAutoScale(unsigned int width, unsigned int height)
Definition: vpDisplay.cpp:242
void setScale(vpScaleType scaleType, unsigned int width, unsigned int height)
Definition: vpDisplay.cpp:255
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
vpDisplay * display
Definition: vpImage.h:141