

//declare image buffers
ColorRGB image1[320][240];
ColorRGB image2[320][240];
ColorRGB image3[320][240];
ColorRGB result[320][240];
int main(int argc, char *argv[])
{
//set up the screen
screen(320,240,0, "Image Arithmetic");
//load the images into the buffers
loadBMP("pics/photo1.bmp", image1[0], w, h);
loadBMP("pics/photo2.bmp", image2[0], w, h);
loadBMP("pics/photo3.bmp", image3[0], w, h);
//do the image arithmetic (here: "average")
for(int x = 0; x < w; x++)
for(int y = 0; y < h; y++)
{
result[x][y].r = (image1[x][y].r + image2[x][y].r) / 2;
result[x][y].g = (image1[x][y].g + image2[x][y].g) / 2;
result[x][y].b = (image1[x][y].b + image2[x][y].b) / 2;
}
//draw the result buffer to the screen
for(int x = 0; x < w; x++)
for(int y = 0; y < h; y++)
{
pset(x, y, result[x][y]);
}
//redraw & sleep
redraw();
sleep();
}
|
result[x][y].r = min(image2[x][y].r + image3[x][y].r, 255);
result[x][y].g = min(image2[x][y].g + image3[x][y].g, 255);
result[x][y].b = min(image2[x][y].b + image3[x][y].b, 255);
|

result[x][y].r = max(image2[x][y].r - image1[x][y].r, 0);
result[x][y].g = max(image2[x][y].g - image1[x][y].g, 0);
result[x][y].b = max(image2[x][y].b - image1[x][y].b, 0);
|


result[x][y].r = abs(image1[x][y].r - image2[x][y].r);
result[x][y].g = abs(image1[x][y].g - image2[x][y].g);
result[x][y].b = abs(image1[x][y].b - image2[x][y].b);
|

result[x][y].r = int(255 * (image2[x][y].r / 255.0 * image1[x][y].r / 255.0));
result[x][y].g = int(255 * (image2[x][y].g / 255.0 * image1[x][y].g / 255.0));
result[x][y].b = int(255 * (image2[x][y].b / 255.0 * image1[x][y].b / 255.0));
|

result[x][y].r = (image1[x][y].r + image2[x][y].r) / 2;
result[x][y].g = (image1[x][y].g + image2[x][y].g) / 2;
result[x][y].b = (image1[x][y].b + image2[x][y].b) / 2;
|

result[x][y].r = int(image1[x][y].r * 0.75 + image2[x][y].r * 0.25);
result[x][y].g = int(image1[x][y].g * 0.75 + image2[x][y].g * 0.25);
result[x][y].b = int(image1[x][y].b * 0.75 + image2[x][y].b * 0.25);
|

//declare image buffers
ColorRGB image1[320][240];
ColorRGB image2[320][240];
ColorRGB image3[320][240];
ColorRGB result[320][240];
int main(int argc, char *argv[])
{
//set up the screen
screen(320,240,0, "Image Arithmetic");
//load the images into the buffers
loadBMP("pics/photo1.bmp", image1[0], w, h);
loadBMP("pics/photo2.bmp", image2[0], w, h);
loadBMP("pics/photo3.bmp", image3[0], w, h);
float weight;
while(!done())
{
weight = (1.0 + cos(getTime() / 1000.0)) / 2.0;
//do the image arithmetic
for(int x = 0; x < w; x++)
for(int y = 0; y < h; y++)
{
result[x][y].r = int(image1[x][y].r * weight + image2[x][y].r * (1 - weight));
result[x][y].g = int(image1[x][y].g * weight + image2[x][y].g * (1 - weight));
result[x][y].b = int(image1[x][y].b * weight + image2[x][y].b * (1 - weight));
}
//draw the result buffer to the screen
for(int x = 0; x < w; x++)
for(int y = 0; y < h; y++)
{
pset(x, y, result[x][y]);
}
//redraw
redraw();
}
}
|

result[x][y].r = min(image1[x][y].r, image2[x][y].r);
result[x][y].g = min(image1[x][y].g, image2[x][y].g);
result[x][y].b = min(image1[x][y].b, image2[x][y].b);
|

result[x][y].r = max(image1[x][y].r, image2[x][y].r);
result[x][y].g = max(image1[x][y].g, image2[x][y].g);
result[x][y].b = max(image1[x][y].b, image2[x][y].b);
|

result[x][y].r = int(sqrt(double(image1[x][y].r * image1[x][y].r + image2[x][y].r * image2[x][y].r)) / sqrt(2.0));
result[x][y].g = int(sqrt(double(image1[x][y].g * image1[x][y].g + image2[x][y].g * image2[x][y].g)) / sqrt(2.0));
result[x][y].b = int(sqrt(double(image1[x][y].b * image1[x][y].b + image2[x][y].b * image2[x][y].b)) / sqrt(2.0));
|

result[x][y].r = image1[x][y].r & image2[x][y].r;
result[x][y].g = image1[x][y].g & image2[x][y].g;
result[x][y].b = image1[x][y].b & image2[x][y].b;
|

result[x][y].r = image1[x][y].r | image2[x][y].r;
result[x][y].g = image1[x][y].g | image2[x][y].g;
result[x][y].b = image1[x][y].b | image2[x][y].b;
|

result[x][y].r = image1[x][y].r ^ image2[x][y].r;
result[x][y].g = image1[x][y].g ^ image2[x][y].g;
result[x][y].b = image1[x][y].b ^ image2[x][y].b;
|
