Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "TargaImage.h"
- #define MAX(a, b) (a > b ? a : b)
- #define MIN(a, b) (a < b ? a : b)
- #define CLIP(c) (MIN(MAX(0, c), 255))
- int main(int c, char **v) {
- if (c != 3) {
- std::cerr << "Syntax: " << v[0] << " <original.tga> <compose.tga>" << std::endl;
- return 42;
- }
- TargaImage *image = TargaImage::readImage(v[1]);
- unsigned char *p1 = image->pixels();
- unsigned int h = image->height();
- unsigned int w = image->width();
- TargaImage *out = TargaImage::blankImage(w, h * 6);
- unsigned char *p2 = out->pixels();
- for (unsigned int i = 0; i < w * h * 6; i++) {
- unsigned int ii = i % (w * h); // Original pixel array offset
- unsigned char r = p1[ii * 4], g = p1[ii * 4 + 1], b = p1[ii * 4 + 2];
- p2[i * 4 + 3] = p1[ii * 4 + 3]; // Always set alpha to original alpha
- switch(i / w / h) {
- case 0: // Lighten
- p2[i * 4] = CLIP(r + 50);
- p2[i * 4 + 1] = CLIP(g + 50);
- p2[i * 4 + 2] = CLIP(b + 50);
- break;
- case 1: // Darken
- p2[i * 4] = CLIP(r - 50);
- p2[i * 4 + 1] = CLIP(g - 50);
- p2[i * 4 + 2] = CLIP(b - 50);
- break;
- case 2: // Low Contrast
- p2[i * 4] = CLIP(r / 2);
- p2[i * 4 + 1] = CLIP(g / 2);
- p2[i * 4 + 2] = CLIP(b / 2);
- break;
- case 3: // High Contrast
- p2[i * 4] = CLIP(r * 2);
- p2[i * 4 + 1] = CLIP(g * 2);
- p2[i * 4 + 2] = CLIP(b * 2);
- break;
- case 4: // Low Contrast
- p2[i * 4] = p2[i * 4 + 1] = p2[i * 4 + 2] = CLIP(r * 0.299 + g * 0.587 + b * 0.114);
- break;
- case 5: // Low Contrast
- p2[i * 4] = CLIP(r * 0.393 + g * 0.769 + b * 0.189);
- p2[i * 4 + 1] = CLIP(r * 0.349 + g * 0.686 + b * 0.168);
- p2[i * 4 + 2] = CLIP(r * 0.272 + g * 0.534 + b * 0.131);
- break;
- }
- }
- out->write(v[2]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment