From 27db4e00ee1efa5e42ec62745a49fe42921a7e22 Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Sat, 15 Sep 2012 12:03:42 +0200 Subject: [PATCH] changed everything to lowercase, made test3 simpler --- ImageStreams/basics.hpp | 27 +++++++++++++++------------ ImageStreams/bmp.hpp | 6 +++++- ImageStreams/main.cpp | 23 ++++++----------------- ImageStreams/png.hpp | 2 +- 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/ImageStreams/basics.hpp b/ImageStreams/basics.hpp index c3de42f..eeb8eb0 100644 --- a/ImageStreams/basics.hpp +++ b/ImageStreams/basics.hpp @@ -18,6 +18,9 @@ p(int v) p(double v) + The order in the ctor is rgb even though the internal structure may be + different + It should be trivially writable with memcpy (TODO: check exact requirement) Furthermore it should have a static constexpr size_t num_colors indicating the @@ -30,35 +33,35 @@ namespace pixel_formats { return std::min(255, std::max(0, n)); } - struct Gray { + struct gray { static constexpr size_t num_colors = 1; static constexpr size_t bits_per_color = 8; - Gray() : value(0) {} - Gray(double intensity) : value(clamp(255*intensity)) {} - Gray(int intensity) : value(clamp(intensity)) {} + gray() : value(0) {} + gray(double intensity) : value(clamp(255*intensity)) {} + gray(int intensity) : value(clamp(intensity)) {} private: uint8_t value; }; - struct RGB { + struct rgb { static constexpr size_t num_colors = 3; static constexpr size_t bits_per_color = 8; - RGB() + rgb() : red(0) , green(0) , blue(0) {} - RGB(double red, double green, double blue) + rgb(double red, double green, double blue) : red(clamp(255*red)) , green(clamp(255*green)) , blue(clamp(255*blue)) {} - RGB(int red, int green, int blue) + rgb(int red, int green, int blue) : red(clamp(red)) , green(clamp(green)) , blue(clamp(blue)) @@ -70,23 +73,23 @@ namespace pixel_formats { uint8_t blue; }; - struct BGR{ + struct bgr{ static constexpr size_t num_colors = 3; static constexpr size_t bits_per_color = 8; - BGR() + bgr() : blue(0) , green(0) , red(0) {} - BGR(double red, double green, double blue) + bgr(double red, double green, double blue) : blue(clamp(255*blue)) , green(clamp(255*green)) , red(clamp(255*red)) {} - BGR(int red, int green, int blue) + bgr(int red, int green, int blue) : blue(clamp(blue)) , green(clamp(green)) , red(clamp(red)) diff --git a/ImageStreams/bmp.hpp b/ImageStreams/bmp.hpp index eea68e8..6708743 100644 --- a/ImageStreams/bmp.hpp +++ b/ImageStreams/bmp.hpp @@ -15,6 +15,10 @@ #include #include "basics.hpp" +/* + Note that a bmp file is vertically flipped. + */ + namespace bmp { // file header struct bitmap_file_header { @@ -92,7 +96,7 @@ namespace bmp { struct default_color_table : public std::conditional::bits_per_pixel <= 8, gray_color_table::bits_per_pixel>, no_color_table>::type {}; - template > + template > struct bitmap_stream { typedef P pixel; typedef CT color_table; diff --git a/ImageStreams/main.cpp b/ImageStreams/main.cpp index a4b7f1b..bd28338 100644 --- a/ImageStreams/main.cpp +++ b/ImageStreams/main.cpp @@ -43,7 +43,6 @@ void test2(std::string filename){ } } -// because lambdas dont work yet... inline double nice_rand(){ return rand() / double(RAND_MAX); } @@ -51,31 +50,21 @@ inline double nice_rand(){ template void test3(std::string filename){ size_t size = 256; - std::vector arr(size*size); - std::generate_n(arr.begin(), size*size, &nice_rand); - std::vector arr2(size*size, 0); - - for(int i = 0; i < size*size; ++i){ - for (int j = i - 5; j <= i + 5; ++j) { - if(j < 0 || j >= size*size) continue; - arr2[i] += arr[j] * 0.1; - } - } ImageType image(size, size, filename); - for(auto x : arr2) - image << typename ImageType::pixel(x); + for(int i = 0; i < size*size; ++i) + image << typename ImageType::pixel(nice_rand()); } int main(int argc, const char * argv[]){ test>("test.png"); test>("test.bmp"); - test2>("test_gray.png"); - test2>("test_gray.bmp"); + test2>("test_gray.png"); + test2>("test_gray.bmp"); - test3>("test_3.png"); - test3>("test_3.bmp"); + test3>("test_3.png"); + test3>("test_3.bmp"); } diff --git a/ImageStreams/png.hpp b/ImageStreams/png.hpp index b1ff23a..df407a3 100644 --- a/ImageStreams/png.hpp +++ b/ImageStreams/png.hpp @@ -28,7 +28,7 @@ namespace png{ } } - template + template struct png_stream{ typedef P pixel;