Copie de ExtendedImage.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #include "ExtendedImage.h"
  2. #if !defined( WIN32 ) || defined( IMT_DLL )
  3. #include <cstring>
  4. #endif
  5. ExtendedImage::ExtendedImage()
  6. #if defined( WIN32 ) && !defined( IMT_DLL )
  7. : CImage(),
  8. m_resX( 1.0 ),
  9. m_resY( 1.0 )
  10. #else
  11. : m_resX( 1.0 ),
  12. m_resY( 1.0 ),
  13. m_width( 0 ),
  14. m_height( 0 ),
  15. m_bpp( 0 ),
  16. m_buffer( NULL )
  17. #endif
  18. {
  19. }
  20. #if !defined( WIN32 ) || defined( IMT_DLL )
  21. ExtendedImage::~ExtendedImage()
  22. {
  23. Destroy();
  24. }
  25. bool ExtendedImage::Create( int width, int height, int bpp )
  26. {
  27. unsigned long n = width * height * bpp / 8;
  28. m_width = width;
  29. m_height = height;
  30. m_bpp = bpp;
  31. m_buffer = new char[ n ];
  32. if ( !m_buffer )
  33. {
  34. return false;
  35. }
  36. return true;
  37. }
  38. void ExtendedImage::Destroy()
  39. {
  40. delete[] m_buffer;
  41. m_buffer = NULL;
  42. m_width = 0;
  43. m_height = 0;
  44. m_bpp = 0;
  45. m_resX = 1.0;
  46. m_resY = 1.0;
  47. }
  48. bool ExtendedImage::IsNull()
  49. {
  50. return m_buffer ? false : true;
  51. }
  52. bool ExtendedImage::SetRaw( char* buffer, unsigned long n )
  53. {
  54. if ( buffer )
  55. {
  56. int bpp = m_bpp / 8;
  57. unsigned long deltaH = ( n / bpp ) % m_height;
  58. unsigned long scanline = m_width * bpp;
  59. int i = m_height;
  60. char* bptr = m_buffer;
  61. char* iptr = buffer;
  62. while ( i-- )
  63. {
  64. std::memcpy( bptr, iptr, scanline );
  65. bptr += scanline;
  66. iptr += scanline + deltaH;
  67. }
  68. return true;
  69. }
  70. return false;
  71. }
  72. char* ExtendedImage::GetBits()
  73. {
  74. return m_buffer;
  75. }
  76. char* ExtendedImage::GetPixel( int x, int y )
  77. {
  78. int n = m_bpp / 8;
  79. return m_buffer + n * ( m_width * y + x );
  80. }
  81. void ExtendedImage::SetPixel( int x, int y, char value )
  82. {
  83. char *dadd;
  84. int n = m_bpp / 8;
  85. dadd = m_buffer + n * ( m_width * y + x );
  86. *dadd = value;
  87. }
  88. #endif
  89. bool ExtendedImage::HasCalibration()
  90. {
  91. return ( ( m_resX > 0.0 ) && ( m_resY > 0.0 ) );
  92. }
  93. void ExtendedImage::SetResolution( double resX, double resY )
  94. {
  95. m_resX = resX;
  96. m_resY = resY;
  97. }
  98. void ExtendedImage::Copy(int dimh, int dimv, ExtendedImage *vSource)
  99. {
  100. int x, y;
  101. unsigned long pixel;
  102. for (x = 0; x < dimh; x++)
  103. {
  104. for (y = 0; y < dimv; y++)
  105. {
  106. pixel = (unsigned long) *vSource->GetPixel(x,y);
  107. // SetPixel(x, y, pixel);
  108. }
  109. }
  110. }
  111. void ExtendedImage::Copy2(int dimh, int dimv, ExtendedImage *vSource)
  112. {
  113. char* imgPtr = (char*) GetBits();
  114. char* imgPtrSrc = (char*) vSource->GetBits();
  115. memcpy(imgPtr, imgPtrSrc, (size_t) (dimh * dimv * 3 * sizeof(unsigned char)));
  116. }