diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/color.cc | 19 | ||||
-rw-r--r-- | src/color.h | 24 | ||||
-rw-r--r-- | src/imgen.cc | 29 | ||||
-rw-r--r-- | src/imgen.h | 21 | ||||
-rw-r--r-- | src/ppm_pixel_stream.cc | 32 | ||||
-rw-r--r-- | src/ppm_pixel_stream.h | 23 |
7 files changed, 107 insertions, 43 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d543a9..46df0da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ add_executable( example example.cc src/imgen.cc + src/color.cc + src/ppm_pixel_stream.cc ) target_link_libraries( diff --git a/src/color.cc b/src/color.cc new file mode 100644 index 0000000..9af409a --- /dev/null +++ b/src/color.cc @@ -0,0 +1,19 @@ +#include "color.h" + +namespace imgen { + +color red() { return color{255, 0, 0}; } +color lime() { return color{ 0, 255, 0}; } +color blue() { return color{ 0, 0, 255}; } +color yellow() { return color{255, 255, 0}; } +color cyan() { return color{ 0, 255, 255}; } +color magenta() { return color{255, 0, 255}; } +color silver() { return color{192, 192, 192}; } +color maroon() { return color{128, 0, 0}; } +color olive() { return color{128, 128, 0}; } +color green() { return color{ 0, 128, 0}; } +color purple() { return color{128, 0, 128}; } +color teal() { return color{ 0, 128, 128}; } +color navy() { return color{ 0, 0, 128}; } + +} diff --git a/src/color.h b/src/color.h new file mode 100644 index 0000000..2c35465 --- /dev/null +++ b/src/color.h @@ -0,0 +1,24 @@ +#pragma once + +#include <tuple> +#include <cstdint> + +namespace imgen { + +using color = std::tuple<std::uint8_t, std::uint8_t, std::uint8_t>; + +color red(); +color lime(); +color blue(); +color yellow(); +color cyan(); +color magenta(); +color silver(); +color maroon(); +color olive(); +color green(); +color purple(); +color teal(); +color navy(); + +} diff --git a/src/imgen.cc b/src/imgen.cc index 25731e1..027e425 100644 --- a/src/imgen.cc +++ b/src/imgen.cc @@ -1,34 +1,9 @@ #include "imgen.h" -namespace { - -inline void write_color(std::ofstream& out, const imgen::color& color) { - out << std::get<0>(color) - << std::get<1>(color) - << std::get<2>(color); -} - -} +#include "ppm_pixel_stream.h" namespace imgen { -ppm_pixel_stream::ppm_pixel_stream( - const std::string& path, - const std::size_t width, - const std::size_t height -): stream_() { - this->stream_.open(path, std::ios::binary | std::ios::out); - this->stream_.sync_with_stdio(false); - - this->stream_ << "P6\n" << width << " " << height << "\n255\n"; -} - -ppm_pixel_stream& ppm_pixel_stream::operator<<(const color& value) { - write_color(this->stream_, value); - - return *this; -} - void write_ppm( const std::string& path, const std::size_t width, @@ -42,7 +17,7 @@ void write_ppm( const std::ptrdiff_t min_x = width / 2 * -1; const std::ptrdiff_t max_x = width / 2; - for ( std::ptrdiff_t posY = min_y; posY < max_y; ++posY ) { + for ( std::ptrdiff_t posY = max_y; posY > min_y; --posY ) { for ( std::ptrdiff_t posX = min_x; posX < max_x; ++posX ) { file << generator(posX, posY); } diff --git a/src/imgen.h b/src/imgen.h index 35b798d..6954239 100644 --- a/src/imgen.h +++ b/src/imgen.h @@ -1,24 +1,13 @@ +#pragma once + #include <string> -#include <utility> -#include <fstream> #include <functional> -namespace imgen { - -using color = std::tuple<std::uint8_t, std::uint8_t, std::uint8_t>; +#include "color.h" -class ppm_pixel_stream { - public: - ppm_pixel_stream(const std::string& path, - const std::size_t width, - const std::size_t height); - - ppm_pixel_stream& operator<<(const color& value); - - private: - std::ofstream stream_; +namespace imgen { -}; +using colored_vector = std::tuple<int, int, color>; void write_ppm( const std::string& path, diff --git a/src/ppm_pixel_stream.cc b/src/ppm_pixel_stream.cc new file mode 100644 index 0000000..465584b --- /dev/null +++ b/src/ppm_pixel_stream.cc @@ -0,0 +1,32 @@ +#include "ppm_pixel_stream.h" + +namespace { + +inline void write_color(std::ofstream& out, const imgen::color& color) { + out << std::get<0>(color) + << std::get<1>(color) + << std::get<2>(color); +} + +} + +namespace imgen { + +ppm_pixel_stream::ppm_pixel_stream( + const std::string& path, + const std::size_t width, + const std::size_t height +): stream_() { + this->stream_.open(path, std::ios::binary | std::ios::out); + this->stream_.sync_with_stdio(false); + + this->stream_ << "P6\n" << width << " " << height << "\n255\n"; +} + +ppm_pixel_stream& ppm_pixel_stream::operator<<(const color& value) { + write_color(this->stream_, value); + + return *this; +} + +} diff --git a/src/ppm_pixel_stream.h b/src/ppm_pixel_stream.h new file mode 100644 index 0000000..9d8f5a8 --- /dev/null +++ b/src/ppm_pixel_stream.h @@ -0,0 +1,23 @@ +#pragma once + +#include <string> +#include <fstream> + +#include "color.h" + +namespace imgen { + +class ppm_pixel_stream { + public: + ppm_pixel_stream(const std::string& path, + const std::size_t width, + const std::size_t height); + + ppm_pixel_stream& operator<<(const color& value); + + private: + std::ofstream stream_; + +}; + +} |