You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.0 KiB
94 lines
2.0 KiB
//
|
|
// main.cpp
|
|
// ImageStreams
|
|
//
|
|
// Created by Joshua Moerman on 9/7/12.
|
|
// Copyright (c) 2012 Vadovas. All rights reserved.
|
|
//
|
|
|
|
#include <iostream>
|
|
|
|
#include "png.hpp"
|
|
#include "bmp.hpp"
|
|
#include "basics.hpp"
|
|
|
|
#include <cmath>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
|
|
template <typename ImageType>
|
|
void xor_color(std::string filename){
|
|
size_t size = 512;
|
|
ImageType image(size, size, filename);
|
|
|
|
for(int y = 0; y < size; ++y){
|
|
for(int x = 0; x < size; ++x){
|
|
image << typename ImageType::pixel(x ^ y, (2 * x) ^ y, x ^ (2 * y));
|
|
}
|
|
}
|
|
}
|
|
|
|
template <typename ImageType>
|
|
void xor_grad(std::string filename){
|
|
size_t size = 256;
|
|
ImageType image(size, size, filename);
|
|
|
|
for(int y = 0; y < size; ++y){
|
|
for(int x = 0; x < size; ++x){
|
|
if(x < size/2)
|
|
image << typename ImageType::pixel(x ^ y);
|
|
else
|
|
image << typename ImageType::pixel(y);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline double nice_rand(){
|
|
return rand() / double(RAND_MAX);
|
|
}
|
|
|
|
template <typename ImageType>
|
|
void noise(std::string filename){
|
|
size_t size = 256;
|
|
|
|
ImageType image(size, size, filename);
|
|
|
|
for(int i = 0; i < size*size; ++i)
|
|
image << typename ImageType::pixel(nice_rand());
|
|
}
|
|
|
|
template <typename ImageType>
|
|
void automata(std::string filename){
|
|
size_t width = 1024;
|
|
size_t height = 768;
|
|
|
|
std::vector<int> r1(width, 0);
|
|
std::vector<int> r2(width, 0);
|
|
|
|
r1[width/2] = 1;
|
|
|
|
ImageType image(width, height, filename);
|
|
for(int y = 0; y < height; ++y){
|
|
for(auto x : r1) image << typename ImageType::pixel((double)x);
|
|
|
|
r1.swap(r2);
|
|
for(int x = 1; x < width-1; ++x){
|
|
r1[x] = (r2[x-1] || r2[x] || r2[x+1]) && !(r2[x-1] && r2[x] && r2[x+1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
int main(int argc, const char * argv[]){
|
|
xor_color<png::colored_ostream>("xor_color.png");
|
|
xor_color<bmp::colored_ostream>("xor_color.bmp");
|
|
|
|
xor_grad<png::gray_ostream>("xor_grad.png");
|
|
xor_grad<bmp::gray_ostream>("xor_grad.bmp");
|
|
|
|
noise<png::gray_ostream>("noise.png");
|
|
noise<bmp::gray_ostream>("noise.bmp");
|
|
|
|
automata<png::gray_ostream>("automata.png");
|
|
automata<bmp::gray_ostream>("automata.bmp");
|
|
}
|
|
|
|
|