Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

nm16.cpp File Reference

#include <iostream>
#include <cstdio>

Include dependency graph for nm16.cpp:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
float * readRowS16 (istream &in, int width)
float readS16 (istream &in)

Variables

int halfKernelSize = 1
int kernelSize = 2


Function Documentation

int main int  argc,
char *  argv[]
 

Definition at line 29 of file nm16.cpp.

References halfKernelSize, kernelSize, and readRowS16().

00030 {
00031     if (argc < 5)
00032     {
00033         cerr << "Usage: nm16 <width> <height> <bumpheight> <filter method>\n";
00034         return 1;
00035     }
00036 
00037     int width = 0;
00038     int height = 0;
00039     float bumpheight = 1.0f;
00040     int method = 0;
00041 
00042     if (sscanf(argv[1], " %d", &width) != 1 ||
00043         sscanf(argv[2], " %d", &height) != 1)
00044     {
00045         cerr << "Bad image dimensions.\n";
00046         return 1;
00047     }
00048 
00049     if (sscanf(argv[3], " %f", &bumpheight) != 1)
00050     {
00051         cerr << "Invalid bump height.\n";
00052         return 1;
00053     }
00054 
00055     if (sscanf(argv[4], " %d", &method) != 1)
00056     {
00057         cerr << "Bad filter method.\n";
00058         return 1;
00059     }
00060 
00061     // Binary 8-bit grayscale header
00062     // cout << "P5\n";
00063     // Binary 8-bit/channel RGB header
00064     cout << "P6\n";
00065     cout << width << ' ' << height << '\n' << "255\n";
00066 
00067     float** samples = new float*[height];
00068 
00069     for (int i = 0; i < kernelSize - 1; i++)
00070         samples[i] = readRowS16(cin, width);
00071 
00072     for (int y = 0; y < height; y++)
00073     {
00074         // Out with the old . . .
00075         if (y > halfKernelSize)
00076             delete[] samples[y - halfKernelSize - 1];
00077 
00078         // . . . and in with the new.
00079         if (y < height - halfKernelSize)
00080             samples[y + halfKernelSize] = readRowS16(cin, width);
00081 
00082         for (int x = 0; x < width; x++)
00083         {
00084 #if 0
00085             unsigned char v = (unsigned char) (samples[y][x]  * 255.99f);
00086             cout.write((char*) &v, 1);
00087 #endif
00088             float dx;
00089             if (x == width - 1)
00090                 dx = samples[y][0] - samples[y][x];
00091             else
00092                 dx = samples[y][x + 1] - samples[y][x];
00093 
00094             float dy;
00095             if (y == height - 1)
00096                 dy = samples[y][x] - samples[y - 1][x];
00097             else
00098                 dy = samples[y + 1][x] - samples[y][x];
00099         }
00100     }
00101 
00102     return 0;
00103 }

float* readRowS16 istream &  in,
int  width
 

Definition at line 19 of file nm16.cpp.

References readS16().

Referenced by main().

00020 {
00021     float* row = new float[width];
00022     for (int i = 0; i < width; i++)
00023         row[i] = readS16(in);
00024 
00025     return row;
00026 }

float readS16 istream &  in  ) 
 

Definition at line 10 of file nm16.cpp.

Referenced by readRowS16().

00011 {
00012     unsigned char c[2];
00013     cin.read((char*) c, 2);
00014 
00015     return (((short) c[0] << 8) | c[1]) * (1.0f / 65535.0f);
00016 }


Variable Documentation

int halfKernelSize = 1
 

Definition at line 7 of file nm16.cpp.

Referenced by main().

int kernelSize = 2
 

Definition at line 6 of file nm16.cpp.

Referenced by main().


Generated on Sat Jan 14 22:33:04 2006 for Celestia by  doxygen 1.4.1