Skip to content

Instantly share code, notes, and snippets.

@plasma-effect
Created September 9, 2014 08:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plasma-effect/d09982ad15dbb8977308 to your computer and use it in GitHub Desktop.
Save plasma-effect/d09982ad15dbb8977308 to your computer and use it in GitHub Desktop.
//Copyright(c) 2014, plasma-effect
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without
//modification, are permitted provided that the following conditions are met :
//*Redistributions of source code must retain the above copyright notice,
//this list of conditions and the following disclaimer.
//* Redistributions in binary form must reproduce the above copyright notice,
//this list of conditions and the following disclaimer in the documentation
//and / or other materials provided with the distribution.
//* Neither the name of the <organization> nor the names of its contributors
//may be used to endorse or promote products derived from this software
//without specific prior written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
//DISCLAIMED.IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
//DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
//ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
//SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include<boost/gil/gil_all.hpp>
#include<boost/gil/extension/io/png_io.hpp>
#include<utility>
#include<array>
#include<algorithm>
#include<type_traits>
using namespace boost::gil;
template<std::size_t Length>struct Notes
{
std::array<std::array<bool, 6>, Length * 48 + 1> data_;
static const std::size_t length_ = Length;
Notes() :data_(){}
void write(int n, int t, std::array<bool, 6>const& d)
{
data_[n * 48 + t] = d;
}
};
template<std::size_t Length>void print_out(Notes<Length>const& notes, const char* name)
{
const std::size_t y_size = Length * 48 * 3;
rgb8_image_t image(130, y_size);
auto& v = view(image);
typedef typename std::remove_reference<decltype(v(0, 0))>::type value_type;
std::fill(v.begin(), v.end(), value_type(0xFF, 0xFF, 0xFF));
for (int y = 0; y < y_size; ++y)
{
v( 0, y) = value_type(0, 0, 0);
v( 30, y) = value_type(0, 0, 0);
v( 50, y) = value_type(0, 0, 0);
v( 70, y) = value_type(0, 0, 0);
v( 90, y) = value_type(0, 0, 0);
v(110, y) = value_type(0, 0, 0);
}
for (int i = 0; i < Length * 4; ++i)
{
for (int x = 1; x <= 29; ++x)
v(x, i * 36) = value_type(195, 195, 195);
for (int x = 1; x < 20; ++x)
{
v( 30 + x, i * 36) = value_type(195, 195, 195);
v( 50 + x, i * 36) = value_type(195, 195, 195);
v( 70 + x, i * 36) = value_type(195, 195, 195);
v( 90 + x, i * 36) = value_type(195, 195, 195);
v(110 + x, i * 36) = value_type(195, 195, 195);
}
}
for (int i = 0; i < (Length * 48); ++i)
{
if (notes[i][0])
{
for (int x = 0; x < 29; ++x)for (int y = -1; y < 2; ++y)
v(1 + x, y_size - i * 3 + y) = value_type(0xFF, 0, 0);
}
if (notes[i][1])
{
for (int x = 1; x <= 19; ++x)for (int y = -1; y < 2; ++y)
v(30 + x, y_size - i * 3 + y) = value_type(0x6F, 0x6F, 0x6F);
}
if (notes[i][2])
{
for (int x = 1; x <= 19; ++x)for (int y = -1; y < 2; ++y)
v(50 + x, y_size - i * 3 + y) = value_type(0, 128, 192);
}
if (notes[i][3])
{
for (int x = 1; x <= 19; ++x)for (int y = -1; y < 2; ++y)
v(70 + x, y_size - i * 3 + y) = value_type(0x6F, 0x6F, 0x6F);
}
if (notes[i][4])
{
for (int x = 1; x <= 19; ++x)for (int y = -1; y < 2; ++y)
v(90 + x, y_size - i * 3 + y) = value_type(0, 128, 192);
}
if (notes[i][5])
{
for (int x = 1; x <= 19; ++x)for (int y = -1; y < 2; ++y)
v(110 + x, y_size - i * 3 + y) = value_type(0x6F, 0x6F, 0x6F);
}
}
if (notes[48*Length][0])
{
for (int x = 0; x < 29; ++x)for (int y = 0; y < 2; ++y)
v(1 + x, y) = value_type(0xFF, 0, 0);
}
if (notes[48 * Length][1])
{
for (int x = 1; x <= 19; ++x)for (int y = 0; y < 2; ++y)
v(30 + x, y) = value_type(0x6F, 0x6F, 0x6F);
}
if (notes[48 * Length][2])
{
for (int x = 1; x <= 19; ++x)for (int y = 0; y < 2; ++y)
v(50 + x, y) = value_type(0, 128, 192);
}
if (notes[48 * Length][3])
{
for (int x = 1; x <= 19; ++x)for (int y = 0; y < 2; ++y)
v(70 + x, y) = value_type(0x6F, 0x6F, 0x6F);
}
if (notes[48 * Length][4])
{
for (int x = 1; x <= 19; ++x)for (int y = 0; y < 2; ++y)
v(90 + x, y) = value_type(0, 128, 192);
}
if (notes[48 * Length][5])
{
for (int x = 1; x <= 19; ++x)for (int y = 0; y < 2; ++y)
v(110 + x, y) = value_type(0x6F, 0x6F, 0x6F);
}
png_write_view(name, view(image));
}
int main()
{
Notes<17> notes;
#define WRITE(n,t,...) notes.write(n,t,{{__VA_ARGS__}})
//0
WRITE(0, 0, 0, 1, 0, 1, 0, 1);
WRITE(0, 3, 0, 0, 1, 0, 1, 0);
WRITE(0, 6, 0, 1, 0, 1, 0, 1);
WRITE(0, 9, 0, 0, 1, 0, 1, 0);
WRITE(0, 12, 0, 1, 0, 1, 0, 1);
WRITE(0, 18, 0, 0, 1, 0, 1, 0);
WRITE(0, 24, 0, 1, 0, 1, 0, 1);
WRITE(0, 27, 0, 0, 1, 0, 1, 0);
WRITE(0, 30, 0, 1, 0, 1, 0, 1);
WRITE(0, 33, 0, 0, 1, 0, 1, 0);
WRITE(0, 36, 0, 1, 0, 1, 0, 1);
WRITE(0, 42, 0, 0, 1, 0, 1, 0);
//1
WRITE(1, 0, 1, 1, 0, 0, 0, 1);
WRITE(1, 12, 1, 0, 0, 0, 0, 0);
WRITE(1, 18, 1, 0, 0, 0, 0, 0);
WRITE(1, 24, 1, 0, 0, 0, 0, 0);
WRITE(1, 30, 1, 0, 0, 0, 0, 0);
WRITE(1, 33, 1, 0, 0, 0, 0, 0);
WRITE(1, 36, 1, 0, 0, 0, 0, 0);
WRITE(1, 42, 1, 0, 0, 0, 0, 0);
//2
WRITE(2, 0, 1, 0, 0, 0, 0, 0);
WRITE(2, 6, 1, 0, 0, 0, 0, 0);
WRITE(2, 9, 1, 0, 0, 0, 0, 0);
WRITE(2, 12, 1, 0, 0, 0, 0, 0);
WRITE(2, 15, 1, 0, 0, 0, 0, 0);
WRITE(2, 18, 1, 0, 0, 0, 0, 0);
WRITE(2, 21, 1, 0, 0, 0, 0, 0);
WRITE(2, 24, 1, 0, 0, 0, 0, 0);
WRITE(2, 27, 1, 0, 0, 0, 0, 0);
WRITE(2, 30, 1, 0, 0, 0, 0, 0);
WRITE(2, 36, 1, 0, 0, 0, 0, 0);
WRITE(2, 42, 1, 0, 0, 0, 0, 0);
//3
WRITE(3, 0, 1, 0, 0, 0, 0, 0);
WRITE(3, 6, 1, 0, 0, 0, 0, 0);
WRITE(3, 12, 1, 0, 0, 0, 0, 0);
WRITE(3, 18, 1, 0, 0, 0, 0, 0);
WRITE(3, 24, 1, 0, 0, 0, 0, 0);
WRITE(3, 30, 1, 0, 0, 0, 0, 0);
WRITE(3, 33, 1, 0, 0, 0, 0, 0);
WRITE(3, 36, 1, 0, 0, 0, 0, 0);
WRITE(3, 39, 1, 0, 0, 0, 0, 0);
WRITE(3, 42, 1, 0, 0, 0, 0, 0);
//4
WRITE(4, 0, 1, 0, 0, 0, 0, 0);
WRITE(4, 6, 1, 0, 0, 0, 0, 0);
WRITE(4, 9, 1, 0, 0, 0, 0, 0);
WRITE(4, 12, 1, 0, 0, 0, 0, 0);
WRITE(4, 18, 1, 0, 0, 0, 0, 0);
WRITE(4, 24, 1, 0, 0, 0, 0, 0);
WRITE(4, 27, 1, 0, 0, 0, 0, 0);
WRITE(4, 30, 1, 0, 0, 0, 0, 0);
WRITE(4, 36, 1, 0, 0, 0, 0, 0);
WRITE(4, 42, 1, 0, 0, 0, 0, 0);
//5
WRITE(5, 0, 1, 0, 0, 0, 0, 0);
WRITE(5, 3, 1, 0, 0, 0, 0, 0);
WRITE(5, 6, 1, 0, 0, 0, 0, 0);
WRITE(5, 9, 1, 0, 0, 0, 0, 0);
WRITE(5, 12, 1, 0, 0, 0, 0, 0);
WRITE(5, 15, 1, 0, 0, 0, 0, 0);
WRITE(5, 18, 1, 0, 0, 0, 0, 0);
WRITE(5, 21, 1, 0, 0, 0, 0, 0);
WRITE(5, 24, 1, 0, 0, 0, 0, 0);
WRITE(5, 30, 1, 0, 0, 0, 0, 0);
WRITE(5, 33, 1, 0, 0, 0, 0, 0);
WRITE(5, 36, 1, 0, 0, 0, 0, 0);
WRITE(5, 42, 1, 0, 0, 0, 0, 0);
//6
WRITE(6, 0, 1, 0, 0, 0, 0, 0);
WRITE(6, 6, 1, 0, 0, 0, 0, 0);
WRITE(6, 12, 1, 0, 0, 0, 0, 0);
WRITE(6, 15, 1, 0, 0, 0, 0, 0);
WRITE(6, 18, 1, 0, 0, 0, 0, 0);
WRITE(6, 21, 1, 0, 0, 0, 0, 0);
WRITE(6, 24, 1, 0, 0, 0, 0, 0);
WRITE(6, 27, 1, 0, 0, 0, 0, 0);
WRITE(6, 30, 1, 0, 0, 0, 0, 0);
WRITE(6, 36, 1, 0, 0, 0, 0, 0);
WRITE(6, 42, 1, 0, 0, 0, 0, 0);
WRITE(6, 44, 1, 0, 0, 0, 0, 0);
WRITE(6, 46, 1, 0, 0, 0, 0, 0);
//7
WRITE(7, 0, 1, 0, 0, 0, 0, 0);
WRITE(7, 3, 1, 0, 0, 0, 0, 0);
WRITE(7, 6, 1, 0, 0, 0, 0, 0);
WRITE(7, 12, 1, 0, 0, 0, 0, 0);
WRITE(7, 18, 1, 0, 0, 0, 0, 0);
WRITE(7, 21, 1, 0, 0, 0, 0, 0);
WRITE(7, 24, 1, 0, 0, 0, 0, 0);
WRITE(7, 30, 1, 0, 0, 0, 0, 0);
WRITE(7, 36, 1, 0, 0, 0, 0, 0);
WRITE(7, 42, 1, 0, 0, 0, 0, 0);
//8
WRITE(8, 0, 1, 0, 0, 0, 0, 0);
WRITE(8, 3, 1, 0, 0, 0, 0, 0);
WRITE(8, 6, 1, 0, 0, 0, 0, 0);
WRITE(8, 9, 1, 0, 0, 0, 0, 0);
WRITE(8, 12, 1, 0, 0, 0, 0, 0);
WRITE(8, 15, 1, 0, 0, 0, 0, 0);
WRITE(8, 18, 1, 0, 0, 0, 0, 0);
WRITE(8, 20, 1, 0, 0, 0, 0, 0);
WRITE(8, 22, 1, 0, 0, 0, 0, 0);
WRITE(8, 24, 1, 0, 0, 0, 0, 0);
WRITE(8, 27, 1, 0, 0, 0, 0, 0);
WRITE(8, 30, 1, 0, 0, 0, 1, 0);
WRITE(8, 33, 1, 0, 1, 0, 0, 0);
WRITE(8, 36, 1, 0, 0, 0, 0, 1);
WRITE(8, 42, 1, 0, 0, 0, 0, 1);
//9
WRITE(9, 0, 1, 0, 0, 0, 0, 0);
WRITE(9, 2, 1, 0, 0, 0, 0, 0);
WRITE(9, 4, 1, 0, 0, 0, 0, 0);
WRITE(9, 6, 1, 0, 0, 0, 0, 0);
WRITE(9, 12, 1, 1, 0, 0, 0, 0);
WRITE(9, 21, 1, 0, 0, 0, 0, 0);
WRITE(9, 30, 1, 0, 0, 0, 0, 0);
WRITE(9, 33, 1, 0, 0, 0, 0, 0);
WRITE(9, 36, 1, 1, 0, 0, 0, 0);
WRITE(9, 42, 1, 0, 0, 0, 0, 0);
//10
WRITE(10, 0, 1, 0, 0, 0, 0, 0);
WRITE(10, 6, 1, 0, 0, 0, 0, 0);
WRITE(10, 12, 1, 1, 0, 0, 0, 0);
WRITE(10, 15, 1, 0, 0, 0, 0, 0);
WRITE(10, 18, 1, 0, 0, 0, 0, 0);
WRITE(10, 24, 1, 0, 0, 0, 0, 0);
WRITE(10, 26, 1, 0, 0, 0, 0, 0);
WRITE(10, 28, 1, 0, 0, 0, 0, 0);
WRITE(10, 30, 1, 0, 0, 0, 0, 0);
WRITE(10, 36, 1, 1, 0, 0, 0, 0);
//11
WRITE(11, 0, 1, 0, 0, 0, 0, 0);
WRITE(11, 0, 1, 0, 0, 0, 0, 0);
WRITE(11, 6, 1, 0, 0, 0, 0, 0);
WRITE(11, 12, 1, 1, 0, 0, 0, 0);
WRITE(11, 18, 1, 0, 0, 0, 0, 0);
WRITE(11, 24, 1, 0, 0, 0, 0, 0);
WRITE(11, 30, 1, 0, 0, 0, 0, 0);
WRITE(11, 36, 1, 0, 0, 0, 0, 0);
WRITE(11, 42, 1, 0, 0, 0, 0, 0);
//12
WRITE(12, 0, 1, 0, 0, 0, 0, 0);
WRITE(12, 2, 1, 0, 0, 0, 0, 0);
WRITE(12, 4, 1, 0, 0, 0, 0, 0);
WRITE(12, 6, 1, 0, 0, 0, 0, 0);
WRITE(12, 12, 1, 1, 0, 0, 0, 0);
WRITE(12, 18, 1, 0, 0, 0, 0, 0);
WRITE(12, 24, 1, 0, 0, 0, 0, 0);
WRITE(12, 27, 1, 0, 0, 0, 0, 0);
WRITE(12, 30, 1, 0, 0, 0, 0, 0);
WRITE(12, 33, 1, 0, 0, 0, 0, 0);
WRITE(12, 36, 1, 1, 0, 0, 0, 0);
WRITE(12, 42, 1, 0, 0, 0, 0, 0);
//13
WRITE(13, 0, 1, 0, 0, 0, 0, 0);
WRITE(13, 3, 1, 0, 0, 0, 0, 0);
WRITE(13, 6, 1, 0, 0, 0, 0, 0);
WRITE(13, 9, 1, 0, 0, 0, 0, 0);
WRITE(13, 12, 1, 1, 0, 0, 0, 0);
WRITE(13, 15, 1, 0, 0, 0, 0, 0);
WRITE(13, 18, 1, 0, 0, 0, 0, 0);
WRITE(13, 21, 1, 0, 0, 0, 0, 0);
WRITE(13, 24, 1, 0, 0, 0, 0, 0);
WRITE(13, 30, 1, 0, 0, 0, 0, 0);
WRITE(13, 33, 1, 0, 0, 0, 0, 0);
WRITE(13, 36, 1, 1, 0, 0, 0, 0);
WRITE(13, 42, 1, 0, 0, 0, 0, 0);
//14
WRITE(14, 0, 1, 0, 0, 0, 0, 0);
WRITE(14, 6, 1, 0, 0, 0, 0, 0);
WRITE(14, 12, 1, 1, 0, 0, 0, 0);
WRITE(14, 15, 1, 0, 0, 0, 0, 0);
WRITE(14, 18, 1, 0, 0, 0, 0, 0);
WRITE(14, 21, 1, 0, 0, 0, 0, 0);
WRITE(14, 24, 1, 0, 0, 0, 0, 0);
WRITE(14, 27, 1, 0, 0, 0, 0, 0);
WRITE(14, 30, 1, 0, 0, 0, 0, 0);
WRITE(14, 36, 1, 1, 0, 0, 0, 0);
WRITE(14, 42, 1, 0, 0, 0, 0, 0);
WRITE(14, 44, 1, 0, 0, 0, 0, 0);
WRITE(14, 46, 1, 0, 0, 0, 0, 0);
//15
WRITE(15, 0, 1, 0, 0, 0, 0, 0);
WRITE(15, 6, 1, 0, 0, 0, 0, 0);
WRITE(15, 12, 1, 1, 0, 0, 0, 0);
WRITE(15, 18, 1, 0, 0, 0, 0, 0);
WRITE(15, 30, 1, 0, 0, 0, 0, 0);
WRITE(15, 33, 1, 0, 0, 0, 0, 0);
WRITE(15, 36, 1, 1, 0, 0, 0, 0);
WRITE(15, 42, 1, 0, 0, 0, 0, 0);
//16
WRITE(16, 0, 1, 0, 0, 0, 0, 0);
WRITE(16, 3, 1, 0, 0, 0, 0, 0);
WRITE(16, 6, 1, 1, 0, 0, 0, 0);
WRITE(16, 9, 1, 0, 0, 0, 0, 0);
WRITE(16, 12, 1, 1, 0, 0, 0, 0);
WRITE(16, 15, 1, 0, 0, 0, 0, 0);
WRITE(16, 18, 1, 1, 0, 0, 0, 0);
WRITE(16, 21, 1, 0, 0, 1, 0, 0);
WRITE(16, 24, 1, 1, 0, 0, 0, 0);
WRITE(16, 27, 1, 0, 0, 1, 0, 0);
WRITE(16, 30, 1, 1, 0, 0, 0, 0);
WRITE(16, 33, 1, 0, 0, 1, 0, 0);
WRITE(16, 36, 1, 1, 0, 0, 0, 0);
WRITE(16, 39, 1, 0, 0, 1, 0, 0);
WRITE(16, 42, 1, 1, 0, 0, 0, 0);
WRITE(16, 45, 1, 0, 0, 1, 0, 0);
WRITE(17, 0, 1, 1, 0, 0, 0, 0);
print_out(notes, "Wu_Dao_Hongye_Last17.png");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment