Adapted from Mark
Pingel's Tutorial
Modified by Chi Man Liu in 2007
LibTarga is a library for reading and writing images in the TARGA image file format. It was written by Alex Mohr for use by students in CS559, and for other graphics projects. We also provide you with TargaImage, a class wrapper for LibTarga. TargaImage provides methods to read and write Targa images along with a few utility methods. This tutorial gives examples of reading and writing Targa images using TargaImage. For more detailed documentation, please see:
There are two ways to create a TargaImage instance. The first is to use TargaImage::blankImage which returns an empty image (RGBA = 0 for all pixels); the second is reading a Targa image from a file. In this tutorial, we use the second approach.
The following sample code reads a targa image from input.tga:
TargaImage *image = TargaImage::readImage("input.tga");
Note: Constructors of TargaImage are private. You won't be able to use the "new" operator to create images.
To get the width and height of the image, use
unsigned int wdt = image->width(); unsigned int hgt = image->height();
Writing a Targa file is also very simple:
image->write("output.tga");
Reads and writes may fail for various reasons, such as file not found. In that case, we can use the LibTargaerror handling routines to identify the error. The following expression returns a string description of the most recent error.
tga_error_string(tga_get_last_error())
You may print the error message and take appropriate actions.
Here is a simple example about how to use it. Since I have put comment on the code, I won't discompose it to explain each line's function.
1. Modify Main
#include <iostream> #include "libtarga.h" #include "TargaImage.h" using namespace std; int main(int argc, char** args) { // Check whether the argument is four or not printf("The argc %d\n", argc); if (argc != 4) { cerr << "Did not have enough input arguments which should be \n"; cerr << "1. Source 2. Destination filenames 3. Size of the square\n"; return 0; } // Get the parameters TargaImage *image = NULL; char* input = args[1]; char* output = args[2]; int radius = atoi(args[3]); // Check the input name if (!input) { cerr << "No input is given.\n"; return 0; }// if // Check the output name if (!output) { cerr << "No output is given.\n"; return 0; }// if // Check the square size if(radius <= 0) { cerr << "The size of square is negative.\n"; return 0; } // Load in the image image = TargaImage::readImage(input); // Chech whether it succeed or not and print out necessary error message if (image == NULL) { cerr << "TGA Error: " << tga_error_string(tga_get_last_error()) << "\n"; return 0; } unsigned int width = image->width(); unsigned int height = image->height(); unsigned char* image_data = image->pixels(); // Check the square size if (radius * 2 > width || radius * 2 > height) { cerr << "The size of square bigger than image.\n"; return 0; } // Copy the image center int sourceCenterX = width / 2; int sourceCenterY = height / 2; // Go through the center of the square for (int yOffset = -radius; yOffset <= radius; ++yOffset) { // Compute the index at Y coordinate int sourceY = sourceCenterY + yOffset; if (sourceY >=0 && sourceY < height) { // Check whether Y is over boundary for (int xOffset = -radius; xOffset <= radius; ++xOffset) { int sourceX = sourceCenterX + xOffset; // Compute the index at X coordinate if (sourceX >= 0 && sourceX < width) { // Check whether X is over boundary int index = (sourceY * width + sourceX) * 4; // Compute the index for this pixel image_data[index] = 0; // Change red to 0 image_data[index+1] = 255; // Change green to 1 image_data[index+2] = 0; // Change blue to 0 image_data[index+3] = 255; // Change alpha to 1 } // end of if sourceX } // end of for } // end of if sourceY } // end of for // Save the image if (!image->write(output)) { cerr << "TGA Save Error: " << tga_error_string(tga_get_last_error()) << "\n"; return 0; } cout << "Finish image loading and processing\n"; return 0; }
2. Change the command line argument
You need to input command line argument with "Flower.tga test.tga 100". How can you do it. Please refer to command line argument tutorial
3. Output
After building the entire project and running it. You will find a file name "test.tga" inside the project directory. When you use the irfan or other image viewers to open it, you should be abel to see this picture