aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrian Kummerlaender2016-05-08 19:50:45 +0200
committerAdrian Kummerlaender2016-05-08 19:50:45 +0200
commit21423a44d6e3091addc00c1b0769336e1f154d4e (patch)
treebe468b159f478e70d6d2049d988dbc29c31dcc76 /src
downloadvoronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.tar
voronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.tar.gz
voronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.tar.bz2
voronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.tar.lz
voronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.tar.xz
voronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.tar.zst
voronoi-21423a44d6e3091addc00c1b0769336e1f154d4e.zip
Implement basic PPM writing function
`write_ppm` generates a PPM image using a given generation function. Output is written using `std::ofstream`. The library is intended to become a straight forward way to test out various visualizations.
Diffstat (limited to 'src')
-rw-r--r--src/imgen.cc36
-rw-r--r--src/imgen.h16
2 files changed, 52 insertions, 0 deletions
diff --git a/src/imgen.cc b/src/imgen.cc
new file mode 100644
index 0000000..d574672
--- /dev/null
+++ b/src/imgen.cc
@@ -0,0 +1,36 @@
+#include "imgen.h"
+
+#include <fstream>
+
+namespace {
+
+inline void write_color(std::ofstream& out, const imgen::color& color) {
+ out << std::get<0>(color);
+ out << std::get<1>(color);
+ out << std::get<2>(color);
+}
+
+}
+
+namespace imgen {
+
+void write_ppm(
+ const std::string& path,
+ const std::size_t sizeX,
+ const std::size_t sizeY,
+ std::function<color(std::size_t, std::size_t)> generator
+) {
+ std::ofstream out;
+ out.open(path, std::ios::binary | std::ios::out);
+ out.sync_with_stdio(false);
+
+ out << "P6\n" << sizeX << " " << sizeY << "\n255\n";
+
+ for ( std::size_t posY = 0; posY < sizeY; ++posY ) {
+ for ( std::size_t posX = 0; posX < sizeX; ++posX ) {
+ write_color(out, generator(posX, posY));
+ }
+ }
+}
+
+}
diff --git a/src/imgen.h b/src/imgen.h
new file mode 100644
index 0000000..5ddbaf6
--- /dev/null
+++ b/src/imgen.h
@@ -0,0 +1,16 @@
+#include <string>
+#include <utility>
+#include <functional>
+
+namespace imgen {
+
+using color = std::tuple<std::uint8_t, std::uint8_t, std::uint8_t>;
+
+void write_ppm(
+ const std::string& path,
+ const std::size_t sizeX,
+ const std::size_t sizeY,
+ std::function<color(std::size_t, std::size_t)> generator
+);
+
+}