I have finished a simple project. I worked on it for 2 years. It has been refactored many times from scratch (originally was much more hard to use and a bit confused). Actually the project is not OpenSource because I want to improve it before releasing full source code.
Image Mixer is pretty simple and needs no documentation. You should just take a look to the 3 pdf guides and to the "C++ userguide.txt" file
Features:
Image object - allows images interpolation and file loading/saving. extract color channels from one image (or other info like luminance)
Channel object - Channels have a full feature set of math operators and analyitical functions to work with
Mask object - Logic mask. Used in pair with interpolators/color matrices/algebraic operators allows to limit the effect of function only to certain part of images. you can combine mask with logic operators (not,and,or,xor) to create more complex masks
ColorMatrix object - A color matrix . There are few methods wich creates 3 different type of color rotation matrices based on input values
ColorMatrixChannel object - A different color matrix is applied to every pixel of the image. Input are Channels (very nice to see)
load/save images as PNG, JPG or BMP with any size for loading and saving (auto scale when loading/saving)
What can be done?
Texture Making (most commercial videogames uses edited photos as textures. By combining existing textures you can create new textures)
Image Mixing (based not only on Alpha but on any Info of the images).
ColorCorrection
Tile making (interpolation between tiles using a gradient allows to create texture atlas with many variations on tiles).
Shader prototyping (with some restriction, but usefull for test Post processing effects especially ones wich needs color correction)
Gamma correction ( you have all the analitical functions for doing that).
there's a set of features provided by most painting applications (like GIMP or photoshop) wich can be emulated by ImageMixer. But it is not limited only to that functions.
Feature request:
Wich features do you like to see? Do you think that this software is usefull? (if yes I will put more time on this).
-Noise making (+ a plugin for import images from libnoise)
-A Sampler Object (works also for taking info from adiacent pixels. Will allows to do nice effects like gaussian blur).
-A decent GUI + a plugin system (so instead of many small executables, many small plugin are done and are used as linkable modules through a GUI).
-Save Mix as multy step shader (in pair with the Sampler will allows to prototype shaders for the GPU and those shaders are cutted in 2 or more parts if they are too long.. very usefull to test post-processing effects with software rasterizing. actually is the only feature work in progress).
-GPU acceleration (add tunable inputs so that you can see in real time changes and increase productivity. Usefull for artist and digital artist that need to tune shaders.).
-VideoMix
If you want more features just ask. I will obviously add those features wich someone will use or ask for. I will not spend time on features wich are not used by anyone..
Irrlicht is used as loading/saving library and in future can be used for the GUI and OpenGL functionalities. Actually you can use ImageMixer only on windows and only with C::B. there is not platform speficic code so porting it to new operative systems is easy and fast. Every app compiles in no time and is very fast in doing image processing (even with ColorMatrixChannel). All computing is done in floatinpoint values. so all colors are in the range (0..1)
Two photos:
http://fc07.deviantart.net/fs70/i/2011/ ... 4gudc1.jpg
http://fc05.deviantart.net/fs70/i/2011/ ... 4gud82.jpg
The resulting combination of those two photos (just 1 of the infinite possible results):
In shan-gri la world editor. The tiles for texture atlas are made by just mixing 2 up to 4 teerrain textures using color gradient images as interpolation value..
This is achieved by running in a loop ImageMixer code.
Example code: making a new texture from two textures:
Code: Select all
#include <ImageMixer>
IMAGE_MIXER_START(512,512); //macros handle "main" and exceptions. artist has only to focus on the Mix.
Image A,B;
Channel L;
A.load("texture1.bmp"); //both images are resized to 512x512
B.load("texture2.png", 2,2, 258,258); //but you can specify wich part of the image needs to be resized
L = A.getLuminance();
B.mix(A,L); //mixing images using as interpolation value for each pixel the luminance of A.
B.save("newTexture.jpg");
IMAGE_MIXER_END();
Code: Select all
#include <ImageMixer>
IMAGE_MIXER_START(512,512); //macros handle "main" and exceptions. artist has only to focus on the Mix.
Image A,B,C;
Channel L;
A.load("texture1.bmp"); //all images are resized to 512x512. Indipendently of their sizes.
B.load("texture2.jpg");
C.load("gradient.png"); // a gradient. You can use each color channel for mix different images
L = C.getRed();
B.mix(A,L); //mixing images using as interpolation value for each pixel the gradient value
B.save("tile01.jpg");
IMAGE_MIXER_END();
Download link for Image Mixer: (2,8 MB of zipped package)
http://imagemixertool.deviantart.com/ar ... n7zkaglnd7
projects using imagemixer:
Simple Layer World Editor (I use it for tile making)
EXECUTABLES BUILT WITH IMAGE MIXER WORKS ALSO ON WINDOWS 7-64 bit without installing any dll or package (nether mingw+c::b, of course if you want to make your custom executable instead of running the precompiled ones you have to get c::B + mingw)
The only needed dlls (ImageMixer.dll & IrrlichtLight.dll) are already in the folder with the executable. (so in the "art" folder)