qjpeg/FloatPlane.cpp
author viric@llimona
Mon, 22 Jan 2007 00:45:57 +0100
changeset 76 9cbf4c7e7986
child 78 a55bf2fa3f74
permissions -rw-r--r--
First classes for the qjpeg project.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
76
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     1
#include "FloatPlane.h"
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     2
#include <cstring>
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     3
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     4
extern "C" {
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     5
#include <stdio.h>
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     6
#include <pam.h>
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     7
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     8
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
     9
FloatPlane::FloatPlane()
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    10
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    11
    setMaxMinValue();
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    12
    ready = false;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    13
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    14
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    15
void FloatPlane::setMaxMinValue(unsigned int max, unsigned int min)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    16
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    17
	MAXVALUE=max;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    18
	MINVALUE=min;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    19
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    20
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    21
FloatPlane::FloatPlane(float *_ptr)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    22
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    23
	ptr = _ptr;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    24
    setMaxMinValue();
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    25
    ready = true;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    26
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    27
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    28
FloatPlane::FloatPlane(const unsigned int _width, const unsigned int _height)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    29
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    30
    allocate(_width, _height);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    31
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    32
    setMaxMinValue();
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    33
    ready = true;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    34
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    35
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    36
void FloatPlane::allocate(const unsigned int _width, const unsigned int _height)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    37
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    38
    width = _width;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    39
    height = _height;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    40
	ptr = new float[width*height];
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    41
    ready = true;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    42
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    43
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    44
void FloatPlane::writePGM(const char * filename)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    45
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    46
    struct pam outpam;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    47
    unsigned int row;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    48
    tuple *tuplerow;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    49
 
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    50
    FILE* file;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    51
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    52
    if (!ready)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    53
        return;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    54
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    55
    file = fopen(filename, "wb");
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    56
    if (file == NULL)
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    57
        return;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    58
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    59
    outpam.size = sizeof(outpam);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    60
    outpam.len = outpam.size;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    61
    outpam.file = file;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    62
    outpam.format = PGM_FORMAT;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    63
    outpam.plainformat = 0; /* false */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    64
    outpam.width = width;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    65
    outpam.height = height;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    66
    outpam.depth = 1; /* Grayscale - 1 sample per tuple */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    67
    outpam.allocation_depth = 0; /* Same as depth. */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    68
    outpam.maxval = MAXVALUE;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    69
    std::strcpy(outpam.tuple_type, "GRAYSCALE"); /* PGM non transparent */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    70
 
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    71
    /* needs size,len,file,format,height,width,depth,maxval, tuple_type */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    72
    pnm_writepaminit(&outpam);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    73
 
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    74
    tuplerow = pnm_allocpamrow(&outpam);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    75
 
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    76
    for (row = 0; row < height; row++) {
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    77
        unsigned int column;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    78
        for (column = 0; column < width; ++column) {
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    79
            /* Only one plane */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    80
            /* float to int! */
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    81
            tuplerow[column][0] = ptr[column+width*row];
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    82
        }
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    83
        pnm_writepamrow(&outpam, tuplerow);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    84
    }
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    85
 
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    86
    pnm_freepamrow(tuplerow);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    87
    fclose(file);
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    88
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    89
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    90
unsigned int FloatPlane::getMaxValue()
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    91
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    92
    return MAXVALUE;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    93
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    94
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    95
unsigned int FloatPlane::getWidth()
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    96
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    97
    return width;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    98
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
    99
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   100
unsigned int FloatPlane::getHeight()
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   101
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   102
    return height;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   103
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   104
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   105
float * FloatPlane::getPtr()
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   106
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   107
    return ptr;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   108
}
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   109
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   110
void FloatPlane::free()
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   111
{
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   112
    delete[] ptr;
9cbf4c7e7986 First classes for the qjpeg project.
viric@llimona
parents:
diff changeset
   113
}