#include "cvimage.h" using namespace std; namespace Rotor { //space out to 32 bit RGB padding for cairo void Image::convert24(){ cv::cvtColor(rgb,rgb, CV_RGBA2RGB); } void Image::convert32(){ cv::cvtColor(rgb,rgb, CV_RGB2RGBA); } Image & Image::operator+=(const Image &other) { if (other.w!=w||other.h!=h) { cerr<<"Rotor: cannot add images with different sizes! (wanted "< ichans,ochans; vector compchans; cv::split(rgb,ichans); cv::split(other.rgb,ochans); uint8_t b=0xFF; cv::Mat iA=b-other.alpha; for (int i=0;i<3;i++) { compchans.push_back(ichans[i].mul(iA,1.0/255.0)+ochans[i].mul(other.alpha,1.0/255.0)); } merge(compchans,rgb); //rgb+=other.rgb; //for (int i=0;i>8)+((((int)other.rgb.data[i])*((int)other.alpha.data[i/3]))>>8)); //} } return *this; } Image & Image::alpha_blend(const Image &other) { if (other.w!=w||other.h!=h) { cerr<<"Rotor: cannot blend images with different sizes! (wanted "<>8)+((((int)other.rgb.data[i])*((int)other.alpha.data[i/3]))>>8)); } } return *this; } Image & Image::alpha_merge(const Image &other) { //converts the incoming image to monochrome and inserts it into the alpha channel of this image if (other.w!=w||other.h!=h) { cerr<<"Rotor: cannot merge alpha with different size! (wanted "<rgb=rgb*amount; return other; } Image * Image::operator+(const float &amount) { uint8_t amt=(uint8_t)(amount*255.0f); Image *other=new Image(w,h); other->rgb=rgb+amt; return other; } Image * Image::operator-(const float &amount) { uint8_t amt=(uint8_t)(amount*255.0f); Image *other=new Image(w,h); other->rgb=rgb-amt; return other; } Image * Image::operator/(const float &amount) { Image *other=new Image(w,h); other->rgb=rgb/amount; return other; } }