diff --git a/bitmap-destruction-force/.eslintignore b/bitmap-destruction-force/.eslintignore new file mode 100644 index 0000000..22c42f0 --- /dev/null +++ b/bitmap-destruction-force/.eslintignore @@ -0,0 +1,3 @@ +**/node_modules/* +**/vendor/* +**/*.min.js diff --git a/bitmap-destruction-force/.eslintrc b/bitmap-destruction-force/.eslintrc new file mode 100644 index 0000000..dd1007f --- /dev/null +++ b/bitmap-destruction-force/.eslintrc @@ -0,0 +1,41 @@ +{ + "rules": { + "comma-dangle": ["error", "always-multiline"], + "no-console": 0, + "indent": [ + 2, + 2 + ], + "quotes": [ + 2, + "single" + ], + "linebreak-style": [ + 2, + "unix" + ], + "semi": [ + 2, + "always" + ] + }, + "env": { + "es6": true, + "node": true, + "browser": true + }, + "globals": { + "describe": false, + "it": false, + "beforeEach": false, + "afterEach": false, + "before": false, + "after": false + }, + "ecmaFeatures": { + "modules": true, + "experimentalObjectRestSpread": true, + "impliedStrict": true + }, + "extends": "eslint:recommended" +} diff --git a/bitmap-destruction-force/.gitignore b/bitmap-destruction-force/.gitignore new file mode 100644 index 0000000..b02a2a7 --- /dev/null +++ b/bitmap-destruction-force/.gitignore @@ -0,0 +1,65 @@ +# Created by https://www.gitignore.io/api/osx,linux,node,vim + +### OSX ### +.DS_Store +.AppleDouble +.LSOverride + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +### Vim ### +# swap +[._]*.s[a-w][a-z] +[._]s[a-w][a-z] +# session +Session.vim +# temporary +.netrwhist +*~ + +# auto-generated tag files +tags diff --git a/bitmap-destruction-force/README.md b/bitmap-destruction-force/README.md new file mode 100644 index 0000000..4ea2233 --- /dev/null +++ b/bitmap-destruction-force/README.md @@ -0,0 +1,45 @@ +##Team Bitmap Destruction Force + +**Collaborators:** + +Lee Broxson, Peter Kim + +##How to use this application + +**Original 8-bit color bitmap** + +![alt tag](../assets/bitmap.bmp) + +This application's intent is to easily transform an 8-bit color bitmap file to either greenscale, grayscale or an inverted version of the original bitmap being used. + +**Convert a single 8-bit color bitmap to a greenscaled, grayscaled and inverted color version all at once** + +In the 'bitmap-destruction-force' directory, in your terminal, run the following command: + + node index.js + +**Example of greenscaled bitmap** + +In the primary repository, enter the following command: + + node index.js bitmapFileHelper.turnGreen(Greenscaler.greenScale); + +![alt tag](./transformed-assets/greenscale-bitmap.bmp) + +**Example of grayscaled bitmap** + +In the primary repository, enter the following command: + + node index.js bitmapFileHelper.grayScale(Grayscaler.grayScale); + +![alt tag](./transformed-assets/grayscale-bitmap.bmp) + +**Example of invert-colored bitmap** + +In the primary repository, enter the following command: + + node index.js bitmapFileHelper.invertColor(Inverter.invert); + +![alt tag](./transformed-assets/inverted-bitmap.bmp) + +More features and different bitmap transformers to come! diff --git a/bitmap-destruction-force/gulpfile.js b/bitmap-destruction-force/gulpfile.js new file mode 100644 index 0000000..6fa5a33 --- /dev/null +++ b/bitmap-destruction-force/gulpfile.js @@ -0,0 +1,24 @@ +'use strict'; + +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const mocha = require('gulp-mocha'); + +gulp.task('lint', function() { + return gulp.src(['**/*.js', '!node_modules/**']) + .pipe(eslint()) + .pipe(eslint.format()) + .pipe(eslint.failAfterError()); +}); + +gulp.task('test', function() { + gulp.src('./test/*-test.js', {read:false}) + .pipe(mocha({reporter:'landing'})); +}); + +gulp.task('default', ['test']); + +gulp.task('dev', function() { + gulp.watch(['**/*.js', '!node_modules/**'], + ['lint', 'test']); +}); diff --git a/bitmap-destruction-force/index.js b/bitmap-destruction-force/index.js new file mode 100644 index 0000000..0b6286b --- /dev/null +++ b/bitmap-destruction-force/index.js @@ -0,0 +1,12 @@ +'use strict'; + +const bitmapFileHelper = require('./lib/bitmapFileHelper.js'); + +const Greenscaler = require('./model/greenscale-constructor.js'); +const Inverter = require('./model/inverse-constructor.js'); +const Grayscaler = require('./model/grayscale-constructor.js'); + +//Running node on index.js will produce three unique bitmaps with the function invocations below: +bitmapFileHelper.turnGreen(Greenscaler.greenScale); //Greenscales the bitmap +bitmapFileHelper.invertColor(Inverter.invert); //Inverts the colors of the bitmap +bitmapFileHelper.grayScale(Grayscaler.grayScale); //Grayscales the colors of the bitmap diff --git a/bitmap-destruction-force/lib/bitmapFileHelper.js b/bitmap-destruction-force/lib/bitmapFileHelper.js new file mode 100644 index 0000000..63c407f --- /dev/null +++ b/bitmap-destruction-force/lib/bitmapFileHelper.js @@ -0,0 +1,32 @@ +'use strict'; + +const fs = require('fs'); +var buf; +module.exports = exports = {}; + +exports.turnGreen = function(callback) { + fs.readFile(`${__dirname}/../../assets/bitmap.bmp`, function(err, data){ + if(err) throw new Error('bitmap buffer not acquired'); + buf = data; + callback(buf); + fs.writeFile(`${__dirname}/../transformed-assets/greenscale-bitmap.bmp`, buf); + }); +}; + +exports.invertColor = function(callback) { + fs.readFile(`${__dirname}/../../assets/bitmap.bmp`, function(err, data){ + if(err) throw new Error('bitmap buffer not acquired'); + buf = data; + callback(buf); + fs.writeFile(`${__dirname}/../transformed-assets/inverted-bitmap.bmp`, buf); + }); +}; + +exports.grayScale = function(callback) { + fs.readFile(`${__dirname}/../../assets/bitmap.bmp`, function(err, data){ + if(err) throw new Error('bitmap buffer not acquired'); + buf = data; + callback(buf); + fs.writeFile(`${__dirname}/../transformed-assets/grayscale-bitmap.bmp`, buf); + }); +}; diff --git a/bitmap-destruction-force/model/grayscale-constructor.js b/bitmap-destruction-force/model/grayscale-constructor.js new file mode 100644 index 0000000..06b031c --- /dev/null +++ b/bitmap-destruction-force/model/grayscale-constructor.js @@ -0,0 +1,27 @@ +'use strict'; + +module.exports = exports = {}; + +exports.grayScale = function(buf, err){ + if (err) throw new Error('Error grayscaling bitmap'); + var duck = new exports.GrayScale(buf); + duck.grayScale(buf); +}; + +exports.GrayScale = function(buf){ + this.filesize = buf.readUInt32LE(2); + this.offset = buf.readUInt32LE(10); + this.colorArray = buf.slice(54, 1078); +}; + +exports.GrayScale.prototype.grayScale = function(){ + var currentColor; + for (var i = 0;i < 1024;i += 4){ + currentColor = this.colorArray.slice(i, i+4); + var currentColorAverage = ((currentColor[0] + currentColor[1] + currentColor[2])/3); + currentColor[0] = currentColorAverage; + currentColor[1] = currentColorAverage; + currentColor[2] = currentColorAverage; + currentColor[3] = 0; + } +}; diff --git a/bitmap-destruction-force/model/greenscale-constructor.js b/bitmap-destruction-force/model/greenscale-constructor.js new file mode 100644 index 0000000..775257c --- /dev/null +++ b/bitmap-destruction-force/model/greenscale-constructor.js @@ -0,0 +1,26 @@ +'use strict'; + +module.exports = exports = {}; + +exports.greenScale = function(buf){ + var duck = new exports.GreenScaler(buf); + duck.turnGreen(buf); +}; + +exports.GreenScaler = function(buf){ + this.filesize = buf.readUInt32LE(2); + this.offset = buf.readUInt32LE(10); + this.colorArray = buf.slice(54, 1078); +}; + +exports.GreenScaler.prototype.turnGreen = function(){ + var currentColor; + for (var i = 0;i < 1024;i += 4){ + currentColor = this.colorArray.slice(i, i+4); + var currentColorAverage = ((currentColor[0] + currentColor[1] + currentColor[2])/3); + currentColor[0] = 0; + currentColor[1] = currentColorAverage; + currentColor[2] = 0; + currentColor[3] = 0; + } +}; diff --git a/bitmap-destruction-force/model/inverse-constructor.js b/bitmap-destruction-force/model/inverse-constructor.js new file mode 100644 index 0000000..091f7e7 --- /dev/null +++ b/bitmap-destruction-force/model/inverse-constructor.js @@ -0,0 +1,26 @@ +'use strict'; + +module.exports = exports = {}; + +exports.invert = function(buf){ + var duck = new exports.Inverter(buf); + duck.invertColor(buf); +}; + +exports.Inverter = function(buf){ + this.filesize = buf.readUInt32LE(2); + this.offset = buf.readUInt32LE(10); + this.colorArray = buf.slice(54, 1078); +}; + +exports.Inverter.prototype.invertColor = function(){ + var currentColor; + for (var i = 0;i < 1024;i += 4){ + currentColor = this.colorArray.slice(i, i+4); + //console.log('B' + currentColor[0] + ' + ' + 'G' + currentColor[1] + ' + ' + 'R' + currentColor[2] + ' + ' + 'A' + currentColor[3]); + currentColor[0] = 255 - currentColor[0]; + currentColor[1] = 255 - currentColor[1]; + currentColor[2] = 255 - currentColor[2]; + currentColor[3] = 0; + } +}; diff --git a/bitmap-destruction-force/package.json b/bitmap-destruction-force/package.json new file mode 100644 index 0000000..81b38fb --- /dev/null +++ b/bitmap-destruction-force/package.json @@ -0,0 +1,22 @@ +{ + "name": "bitmap-destruction-force", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": [ + "broxsonl@gmail.com", + "peterkim23@gmail.com" + ], + "license": "ISC", + "devDependencies": { + "eslint": "^3.5.0", + "gulp": "^3.9.1", + "gulp-eslint": "^3.0.1", + "gulp-mocha": "^3.0.1", + "mocha": "^3.0.2" + } +} diff --git a/bitmap-destruction-force/test/bitmapFileHelperTest.js b/bitmap-destruction-force/test/bitmapFileHelperTest.js new file mode 100644 index 0000000..16b9872 --- /dev/null +++ b/bitmap-destruction-force/test/bitmapFileHelperTest.js @@ -0,0 +1,36 @@ +'use strict'; + +const bitmapFileHelper = require('../lib/bitmapFileHelper.js'); +const assert = require('assert'); + +describe('testing bitmapFileHelper', function(){ + describe('#turnGreen', function(){ + it('should return buffer data', function(done){ + bitmapFileHelper.turnGreen(function(buf){ + assert.ok(buf, 'is not buffer data'); + done(); + }); + }); + }); + describe('#invertColor', function(){ + it('should return buffer data', function(done){ + bitmapFileHelper.invertColor(function(buf){ + assert.ok(buf, 'is not buffer data'); + done(); + }); + }); + }); + describe('#grayScale', function(){ + it('should return buffer data', function(done){ + bitmapFileHelper.grayScale(function(buf){ + assert.ok(buf, 'is not buffer data'); + done(); + }); + }); + it('should be a valid filename', function() { + bitmapFileHelper.turnGreen([`${__dirname}/dont-exist.bmp`], function(err){ + assert.ifError(err); + }); + }); + }); +}); diff --git a/bitmap-destruction-force/test/grayscale-constructor-test.js b/bitmap-destruction-force/test/grayscale-constructor-test.js new file mode 100644 index 0000000..32f95b0 --- /dev/null +++ b/bitmap-destruction-force/test/grayscale-constructor-test.js @@ -0,0 +1,13 @@ +'use strict'; + +const assert = require('assert'); +const Grayscaler = require('../model/grayscale-constructor.js'); + +describe('Grayscaler', function(){ + describe('#grayscale', function(){ + it('should ensure Grayscaler is running', function(done){ + assert.ok(Grayscaler); + done(); + }); + }); +}); diff --git a/bitmap-destruction-force/test/greenscale-constructor-test.js b/bitmap-destruction-force/test/greenscale-constructor-test.js new file mode 100644 index 0000000..ed530f0 --- /dev/null +++ b/bitmap-destruction-force/test/greenscale-constructor-test.js @@ -0,0 +1,17 @@ +'use strict'; + +const assert = require('assert'); +const Greenscaler = require('../model/greenscale-constructor.js'); +const bitmapFileHelper = require('../lib/bitmapFileHelper.js'); + + +describe('Greenscaler', function(){ + describe('#turnGreen', function(){ + it('should ensure Greenscaler is running', function(done){ + bitmapFileHelper.turnGreen(Greenscaler); + assert.ok(Greenscaler); + console.log(Greenscaler); + done(); + }); + }); +}); diff --git a/bitmap-destruction-force/test/inverse-constructor-test.js b/bitmap-destruction-force/test/inverse-constructor-test.js new file mode 100644 index 0000000..ea43c66 --- /dev/null +++ b/bitmap-destruction-force/test/inverse-constructor-test.js @@ -0,0 +1,16 @@ +'use strict'; + +const assert = require('assert'); +const Inverter = require('../model/inverse-constructor.js'); +const bitmapFileHelper = require('../lib/bitmapFileHelper.js'); + + +describe('Inverter', function(){ + describe('#invertColor', function(){ + it('should ensure Inverter is running', function(done){ + bitmapFileHelper.invertColor(Inverter); + assert.ok(Inverter); + done(); + }); + }); +}); diff --git a/bitmap-destruction-force/transformed-assets/grayscale-bitmap.bmp b/bitmap-destruction-force/transformed-assets/grayscale-bitmap.bmp new file mode 100644 index 0000000..bd1b35e Binary files /dev/null and b/bitmap-destruction-force/transformed-assets/grayscale-bitmap.bmp differ diff --git a/bitmap-destruction-force/transformed-assets/greenscale-bitmap.bmp b/bitmap-destruction-force/transformed-assets/greenscale-bitmap.bmp new file mode 100644 index 0000000..1336b7a Binary files /dev/null and b/bitmap-destruction-force/transformed-assets/greenscale-bitmap.bmp differ diff --git a/bitmap-destruction-force/transformed-assets/inverted-bitmap.bmp b/bitmap-destruction-force/transformed-assets/inverted-bitmap.bmp new file mode 100644 index 0000000..d835124 Binary files /dev/null and b/bitmap-destruction-force/transformed-assets/inverted-bitmap.bmp differ diff --git a/bitmap-destruction-force/transformed-assets/placeholder.md b/bitmap-destruction-force/transformed-assets/placeholder.md new file mode 100644 index 0000000..e69de29