mirror of
https://github.com/andre-wojtowicz/image-processing-project-student.git
synced 2025-03-25 19:17:12 +01:00
70 lines
2.1 KiB
C++
70 lines
2.1 KiB
C++
#include "negative_image.h"
|
|
|
|
/** Redeclation of the constructor */
|
|
NegativeImage::NegativeImage(PNM* img) :
|
|
Transformation(img)
|
|
{
|
|
}
|
|
|
|
NegativeImage::NegativeImage(PNM* img, ImageViewer* iv) :
|
|
Transformation(img, iv)
|
|
{
|
|
}
|
|
|
|
/** /virtual/
|
|
* Returns a inverted image (negative) of the image given in the constructor
|
|
*/
|
|
PNM* NegativeImage::transform()
|
|
{
|
|
// Getting the dimensions
|
|
int width = image->width();
|
|
int height = image->height();
|
|
|
|
PNM* newImage = new PNM(width, height, image->format());
|
|
|
|
if (image->format() == QImage::Format_Mono)
|
|
{
|
|
// Iterate over image space
|
|
for (int x=0; x<width; x++)
|
|
for (int y=0; y<height; y++)
|
|
{
|
|
QColor color = QColor::fromRgb(image->pixel(x,y)); // Getting the pixel(x,y) value
|
|
|
|
newImage->setPixel(x,y, color == Qt::white ? Qt::color0 : Qt::color1);
|
|
}
|
|
}
|
|
else if (image->format() == QImage::Format_Grayscale8) // Iterate over image space
|
|
{
|
|
for (int x=0; x<width; x++)
|
|
for (int y=0; y<height; y++)
|
|
{
|
|
QRgb pixel = image->pixel(x,y); // Getting the pixel(x,y) value
|
|
|
|
int v = qGray(pixel); // Get the 0-255 value of the L channel
|
|
v = PIXEL_VAL_MAX - v;
|
|
|
|
newImage->setPixel(x,y, QColor(v,v,v).rgb());
|
|
}
|
|
}
|
|
else //if (image->format() == QImage::Format_RGB32)
|
|
{
|
|
// Iterate over image space
|
|
for (int x=0; x<width; x++)
|
|
for (int y=0; y<height; y++)
|
|
{
|
|
QRgb pixel = image->pixel(x,y); // Getting the pixel(x,y) value
|
|
|
|
int r = qRed(pixel); // Get the 0-255 value of the R channel
|
|
int g = qGreen(pixel); // Get the 0-255 value of the G channel
|
|
int b = qBlue(pixel); // Get the 0-255 value of the B channel
|
|
r = PIXEL_VAL_MAX - r;
|
|
g = PIXEL_VAL_MAX - g;
|
|
b = PIXEL_VAL_MAX - b;
|
|
QColor newPixel = QColor(r,g,b);
|
|
newImage->setPixel(x,y, newPixel.rgb());
|
|
}
|
|
}
|
|
|
|
return newImage;
|
|
}
|