Example #1
0
/*
* rotate image using one of three sampling techniques
*/
Image* ip_rotate (Image* src, double theta, int x, int y, int samplingMode, 
				  int gaussianFilterSize, double gaussianSigma)
{
    Image* tempImage = new Image(src->getWidth(), src->getHeight());
    
    if(samplingMode == 0){
        for (int i = 0; i < src->getWidth(); ++i) {
            for (int j = 0; j < src->getHeight(); ++j) {
                Pixel resampledPixel = ip_resample_nearest(src, i, j);
                tempImage->setPixel_((((i-x)*(cos(theta))-((j-y)*sin(theta)))), (((j-y)*(cos(theta))+ ((i-x)*(sin(theta))))), resampledPixel);
            }
        }
    }
    else if(samplingMode == 1){
        for (int i = 0; i < src->getWidth(); ++i) {
            for (int j = 0; j < src->getHeight(); ++j) {
                Pixel resampledPixel = ip_resample_bilinear(src, i, j);
                tempImage->setPixel_((((i-x)*(cos(theta))-((j-y)*sin(theta)))), (((j-y)*(cos(theta))+ ((i-x)*(sin(theta))))), resampledPixel);
            }
        }
    }
    else if (samplingMode == 2){
        //go die
    }
    
    return tempImage;
}
Example #2
0
/*
 * scale image
 */
Image* ip_scale (Image* src, double xFac, double yFac)
{
    Image* dest = new Image(src->getWidth()*xFac, src->getHeight()*yFac);
    
    for (int i = 0; i < dest->getWidth(); ++i) {
        for (int j = 0; j < dest->getHeight(); ++j) {
            double xp = i*1./xFac;
            double yp = j*1./yFac;
            
            if (xp >= src->getWidth() || xp < 0 || yp >= src->getHeight() || yp < 0) {
                continue;
            }
            
            Pixel p = ip_resample_bilinear(src, xp, yp);
            
            dest->setPixel(i, j, p);
        }
    }
    
    return dest;
}
Example #3
0
/*
 * rotate image
 */
Image* ip_rotate (Image* src, double theta)
{
    Image* dest = new Image(src->getWidth(), src->getHeight());
    double x = src->getWidth()/2;
    double y = src->getHeight()/2;
    double ctheta = cos(-theta);
    double stheta = sin(-theta);
    Pixel white = Pixel(1, 1, 1);
    dest->fillImage(white);
    for (int i = 0; i < dest->getWidth(); ++i) {
        for (int j = 0; j < dest->getHeight(); ++j) {
            double xp = x + (i-x)*ctheta - (j-y)*stheta;
            double yp = y + (i-x)*stheta + (j-y)*ctheta;
            
            Pixel p = ip_resample_bilinear(src, xp, yp);
            
            dest->setPixel(i, j, p);
        }
    }
    
    return dest;
}