ExtendedImage.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "ExtendedImage.h"
  2. #include <cstring>
  3. ExtendedImage::ExtendedImage()
  4. : m_resX( 1.0 ),
  5. m_resY( 1.0 ),
  6. m_width( 0 ),
  7. m_height( 0 ),
  8. m_bpp( 0 ),
  9. m_buffer( NULL )
  10. {
  11. }
  12. ExtendedImage::~ExtendedImage()
  13. {
  14. Destroy();
  15. }
  16. bool ExtendedImage::Create( int width, int height, int bpp )
  17. {
  18. unsigned long n = width * height * bpp / 8;
  19. m_width = width;
  20. m_height = height;
  21. m_bpp = bpp;
  22. m_buffer = new char[ n ];
  23. if ( !m_buffer )
  24. {
  25. return false;
  26. }
  27. return true;
  28. }
  29. void ExtendedImage::Destroy()
  30. {
  31. delete[] m_buffer;
  32. m_buffer = NULL;
  33. m_width = 0;
  34. m_height = 0;
  35. m_bpp = 0;
  36. m_resX = 1.0;
  37. m_resY = 1.0;
  38. }
  39. bool ExtendedImage::IsNull()
  40. {
  41. return m_buffer ? false : true;
  42. }
  43. bool ExtendedImage::SetRaw( char* buffer, unsigned long n )
  44. {
  45. if ( buffer )
  46. {
  47. int bpp = m_bpp / 8;
  48. unsigned long deltaH = ( n / bpp ) % m_height;
  49. unsigned long scanline = m_width * bpp;
  50. int i = m_height;
  51. char* bptr = m_buffer;
  52. char* iptr = buffer;
  53. while ( i-- )
  54. {
  55. std::memcpy( bptr, iptr, scanline );
  56. bptr += scanline;
  57. iptr += scanline + deltaH;
  58. }
  59. return true;
  60. }
  61. return false;
  62. }
  63. char* ExtendedImage::GetBuffer()
  64. {
  65. return m_buffer;
  66. }
  67. char* ExtendedImage::GetPixel( int x, int y )
  68. {
  69. int n = m_bpp / 8;
  70. return m_buffer + n * ( m_width * y + x );
  71. }
  72. bool ExtendedImage::HasCalibration()
  73. {
  74. return ( ( m_resX > 0.0 ) && ( m_resY > 0.0 ) );
  75. }
  76. void ExtendedImage::SetResolution( double resX, double resY )
  77. {
  78. m_resX = resX;
  79. m_resY = resY;
  80. }