123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- //
- // Copyright 2013 Christian Henning
- //
- // Distributed under the Boost Software License, Version 1.0
- // See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt
- //
- #define BOOST_TEST_MODULE bmp_test
- #define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
- #define BOOST_FILESYSTEM_VERSION 3
- #include <boost/gil.hpp>
- #include <boost/gil/extension/io/bmp.hpp>
- #include <boost/mp11.hpp>
- #include <boost/test/unit_test.hpp>
- #include <fstream>
- #include "mandel_view.hpp"
- #include "paths.hpp"
- #include "subimage_test.hpp"
- using namespace std;
- using namespace boost;
- using namespace gil;
- namespace fs = boost::filesystem;
- using tag_t = bmp_tag;
- BOOST_AUTO_TEST_SUITE( gil_io_bmp_tests )
- #ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
- BOOST_AUTO_TEST_CASE( read_image_info_using_string )
- {
- {
- using backend_t = get_reader_backend<std::string const, tag_t>::type;
- backend_t backend = read_image_info( bmp_filename
- , tag_t()
- );
- BOOST_CHECK_EQUAL( backend._info._width , 1000 );
- BOOST_CHECK_EQUAL( backend._info._height, 600 );
- }
- {
- ifstream in( bmp_filename.c_str(), ios::binary );
- using backend_t = get_reader_backend<std::ifstream, tag_t>::type;
- backend_t backend = read_image_info( in
- , tag_t()
- );
- BOOST_CHECK_EQUAL( backend._info._width , 1000 );
- BOOST_CHECK_EQUAL( backend._info._height, 600 );
- }
- {
- FILE* file = fopen( bmp_filename.c_str(), "rb" );
- using backend_t = get_reader_backend<FILE*, tag_t>::type;
- backend_t backend = read_image_info( file
- , tag_t()
- );
- BOOST_CHECK_EQUAL( backend._info._width , 1000 );
- BOOST_CHECK_EQUAL( backend._info._height, 600 );
- }
- {
- fs::path my_path( bmp_filename );
- using backend_t = get_reader_backend<fs::path, tag_t>::type;
- backend_t backend = read_image_info( my_path
- , tag_t()
- );
- BOOST_CHECK_EQUAL( backend._info._width , 1000 );
- BOOST_CHECK_EQUAL( backend._info._height, 600 );
- }
- }
- BOOST_AUTO_TEST_CASE( read_image_test )
- {
- {
- rgb8_image_t img;
- read_image( bmp_filename, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- {
- ifstream in( bmp_filename.c_str(), ios::binary );
- rgb8_image_t img;
- read_image( in, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- {
- FILE* file = fopen( bmp_filename.c_str(), "rb" );
- rgb8_image_t img;
- read_image( file, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- {
- fs::path my_path( bmp_filename );
- rgb8_image_t img;
- read_image( my_path, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- }
- BOOST_AUTO_TEST_CASE( read_and_convert_image_test )
- {
- {
- rgb8_image_t img;
- read_and_convert_image( bmp_filename, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- {
- ifstream in( bmp_filename.c_str(), ios::binary );
- rgb8_image_t img;
- read_and_convert_image( in, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- {
- FILE* file = fopen( bmp_filename.c_str(), "rb" );
- rgb8_image_t img;
- read_and_convert_image( file, img, tag_t() );
- BOOST_CHECK_EQUAL( img.width() , 1000 );
- BOOST_CHECK_EQUAL( img.height(), 600 );
- }
- }
- BOOST_AUTO_TEST_CASE( read_view_test )
- {
- {
- rgb8_image_t img( 1000, 600 );
- read_view( bmp_filename, view( img ), tag_t() );
- }
- {
- ifstream in( bmp_filename.c_str(), ios::binary );
- rgb8_image_t img( 1000, 600 );
- read_view( in, view( img ), tag_t() );
- }
- {
- FILE* file = fopen( bmp_filename.c_str(), "rb" );
- rgb8_image_t img( 1000, 600 );
- read_view( file, view( img ), tag_t() );
- }
- }
- BOOST_AUTO_TEST_CASE( read_and_convert_view_test )
- {
- {
- rgb8_image_t img( 1000, 600 );
- read_and_convert_view( bmp_filename, view( img ), tag_t() );
- }
- {
- ifstream in( bmp_filename.c_str(), ios::binary );
- rgb8_image_t img( 1000, 600 );
- read_and_convert_view( in, view( img ), tag_t() );
- }
- {
- FILE* file = fopen( bmp_filename.c_str(), "rb" );
- rgb8_image_t img( 1000, 600 );
- read_and_convert_view( file
- , view( img )
- , tag_t()
- );
- }
- }
- BOOST_AUTO_TEST_CASE( write_view_test )
- {
- #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
- {
- string filename( bmp_out + "write_test_string.bmp" );
- write_view( filename
- , create_mandel_view( 1000, 600
- , rgb8_pixel_t( 0, 0, 255 )
- , rgb8_pixel_t( 0, 255, 0 )
- )
- , tag_t()
- );
- }
- {
- string filename( bmp_out + "write_test_ofstream.bmp" );
- ofstream out( filename.c_str(), ios::binary );
- write_view( out
- , create_mandel_view( 1000, 600
- , rgb8_pixel_t( 0, 0, 255 )
- , rgb8_pixel_t( 0, 255, 0 )
- )
- , tag_t()
- );
- }
- {
- string filename( bmp_out + "write_test_file.bmp" );
- FILE* file = fopen( filename.c_str(), "wb" );
- write_view( file
- , create_mandel_view( 1000, 600
- , rgb8_pixel_t( 0, 0, 255 )
- , rgb8_pixel_t( 0, 255, 0 )
- )
- , tag_t()
- );
- }
- {
- string filename( bmp_out + "write_test_info.bmp" );
- image_write_info< tag_t > info;
- FILE* file = fopen( filename.c_str(), "wb" );
- write_view( file
- , create_mandel_view( 1000, 600
- , rgb8_pixel_t( 0, 0, 255 )
- , rgb8_pixel_t( 0, 255, 0 )
- )
- , info
- );
- }
- #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
- }
- BOOST_AUTO_TEST_CASE( stream_test )
- {
- // 1. Read an image.
- ifstream in( bmp_filename.c_str(), ios::binary );
- rgb8_image_t img;
- read_image( in, img, tag_t() );
- // 2. Write image to in-memory buffer.
- stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary );
- write_view( out_buffer, view( img ), tag_t() );
- // 3. Copy in-memory buffer to another.
- stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary );
- in_buffer << out_buffer.rdbuf();
- // 4. Read in-memory buffer to gil image
- rgb8_image_t dst;
- read_image( in_buffer, dst, tag_t() );
- // 5. Write out image.
- string filename( bmp_out + "stream_test.bmp" );
- ofstream out( filename.c_str(), ios_base::binary );
- #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
- write_view( out, view( dst ), tag_t() );
- #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
- }
- BOOST_AUTO_TEST_CASE( stream_test_2 )
- {
- filebuf in_buf;
- if( !in_buf.open( bmp_filename.c_str(), ios::in | ios::binary ) )
- {
- BOOST_CHECK( false );
- }
- istream in( &in_buf );
- rgb8_image_t img;
- read_image( in, img, tag_t() );
- }
- BOOST_AUTO_TEST_CASE( subimage_test )
- {
- run_subimage_test< rgb8_image_t, tag_t >( bmp_filename
- , point_t( 0, 0 )
- , point_t( 1000, 1 )
- );
- run_subimage_test< rgb8_image_t, tag_t >( bmp_filename
- , point_t( 39, 7 )
- , point_t( 50, 50 )
- );
- }
- BOOST_AUTO_TEST_CASE( dynamic_image_test )
- {
- using my_img_types = mp11::mp_list
- <
- gray8_image_t,
- gray16_image_t,
- rgb8_image_t,
- rgba8_image_t
- >;
- any_image< my_img_types > runtime_image;
- read_image( bmp_filename.c_str()
- , runtime_image
- , tag_t()
- );
- #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
- write_view( bmp_out + "dynamic_image_test.bmp"
- , view( runtime_image )
- , tag_t()
- );
- #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
- }
- #endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
- BOOST_AUTO_TEST_SUITE_END()
|