jpeg_read_test.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // Copyright 2013 Christian Henning
  3. //
  4. // Distributed under the Boost Software License, Version 1.0
  5. // See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt
  7. //
  8. //#define BOOST_TEST_MODULE jpeg_read_test_module
  9. #include <boost/gil.hpp>
  10. #include <boost/gil/extension/io/jpeg.hpp>
  11. #include <boost/test/unit_test.hpp>
  12. #include "paths.hpp"
  13. #include "scanline_read_test.hpp"
  14. using namespace std;
  15. using namespace boost::gil;
  16. using tag_t = jpeg_tag;
  17. BOOST_AUTO_TEST_SUITE( gil_io_jpeg_tests )
  18. #ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
  19. BOOST_AUTO_TEST_CASE( read_header_test )
  20. {
  21. {
  22. using backend_t = get_reader_backend<std::string const, tag_t>::type;
  23. backend_t backend = read_image_info( jpeg_filename
  24. , tag_t()
  25. );
  26. BOOST_CHECK_EQUAL( backend._info._width , 1000u );
  27. BOOST_CHECK_EQUAL( backend._info._height , 600u );
  28. BOOST_CHECK_EQUAL( backend._info._num_components, 3 );
  29. BOOST_CHECK_EQUAL( backend._info._color_space , JCS_YCbCr );
  30. BOOST_CHECK_EQUAL( backend._info._data_precision, 8 );
  31. }
  32. }
  33. BOOST_AUTO_TEST_CASE( read_pixel_density_test )
  34. {
  35. using backend_t = get_reader_backend<std::string const, tag_t>::type;
  36. backend_t backend = read_image_info( jpeg_in + "EddDawson/36dpi.jpg"
  37. , tag_t()
  38. );
  39. rgb8_image_t img;
  40. read_image( jpeg_in + "EddDawson/36dpi.jpg", img, jpeg_tag() );
  41. image_write_info< jpeg_tag > write_settings;
  42. write_settings.set_pixel_dimensions( backend._info._width
  43. , backend._info._height
  44. , backend._info._pixel_width_mm
  45. , backend._info._pixel_height_mm
  46. );
  47. stringstream in_memory( ios_base::in | ios_base::out | ios_base::binary );
  48. write_view( in_memory, view( img ), write_settings );
  49. using backend2_t = get_reader_backend<stringstream, tag_t>::type;
  50. backend2_t backend2 = read_image_info( in_memory
  51. , tag_t()
  52. );
  53. // Because of rounding the two results differ slightly.
  54. if( std::abs( backend._info._pixel_width_mm - backend2._info._pixel_width_mm ) > 10.0
  55. || std::abs( backend._info._pixel_height_mm - backend2._info._pixel_height_mm ) > 10.0
  56. )
  57. {
  58. BOOST_CHECK_EQUAL( 0, 1 );
  59. }
  60. }
  61. BOOST_AUTO_TEST_CASE( read_reference_images_test )
  62. {
  63. using image_t = rgb8_image_t;
  64. image_t img;
  65. read_image( jpeg_filename
  66. , img
  67. , tag_t()
  68. );
  69. #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
  70. write_view( jpeg_out + "rgb8_test.jpg"
  71. , view( img )
  72. , tag_t()
  73. );
  74. #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
  75. }
  76. BOOST_AUTO_TEST_CASE( dct_method_read_test )
  77. {
  78. using image_t = rgb8_image_t;
  79. image_t img;
  80. image_read_settings< jpeg_tag > settings;
  81. settings._dct_method = jpeg_dct_method::fast;
  82. read_image( jpeg_filename
  83. , img
  84. , settings
  85. );
  86. #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
  87. write_view( jpeg_out + "fast_dct_read_test.jpg"
  88. , view( img )
  89. , tag_t()
  90. );
  91. #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
  92. }
  93. BOOST_AUTO_TEST_CASE( read_reference_images_image_iterator_test )
  94. {
  95. test_scanline_reader< rgb8_image_t, jpeg_tag >( jpeg_filename.c_str() );
  96. }
  97. #endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
  98. BOOST_AUTO_TEST_SUITE_END()