blob: fea92a7170d1c38271a195ffe3cf06b77d3f9d1a [file] [log] [blame]
/**
This file contains some utility functions that Image processing kernels require
Written by Pankaj Kukreja
Indian Institute of Technology Hyderabad
*/
#include "ImageHelper.h"
#include "glibc_compat_rand.h"
#include <cstdlib>
#include <fstream> // For reading and saving Image
#include <iostream> // For std::cerr
// Initialize a random Image
void initializeRandomImage(int *image, int height, int width) {
glibc_compat_srand(7);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
image[i * width + j] = glibc_compat_rand() % 256;
}
}
}
// Save Image to outputFile
void saveImage(int *image, const char *outputFile, int height, int width) {
std::ofstream outfile;
outfile.open(outputFile, std::ios::out | std::ios::trunc);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
// Just for safety
if (image[i * width + j] > 255) {
outfile << 255 << " ";
} else if (image[i * width + j] < 0) {
outfile << 0 << " ";
} else {
outfile << image[i * width + j] << " ";
}
}
outfile << std::endl;
}
}
// Initializes a random RGB Image
void initializeRandomColouredImage(int *image, int height, int width) {
glibc_compat_srand(7);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
image[i * (width * 3) + j * 3 + 0] = glibc_compat_rand() % 256;
image[i * (width * 3) + j * 3 + 1] = glibc_compat_rand() % 256;
image[i * (width * 3) + j * 3 + 2] = glibc_compat_rand() % 256;
}
}
}
// Read Pixel values of a black n white Image from $inputFile
void initializeImage(int *image, char *inputFile, int height, int width) {
std::ifstream inFile(inputFile, std::ios::binary);
if (!inFile) {
std::cerr << " Can't open file " << inputFile << std::endl;
exit(1);
}
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
inFile >> image[i * width + j];
}
}
inFile.close();
}
// Read Pixel values of a coloured Image from $inputFile
void initializeColoredImage(int *image, char *inputFile, int height,
int width) {
std::ifstream inFile(inputFile, std::ios::binary);
if (!inFile) {
std::cerr << " Can't open file " << inputFile << std::endl;
exit(1);
}
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
inFile >> image[i * width + j + 0]; // R
inFile >> image[i * width + j + 1]; // G
inFile >> image[i * width + j + 2]; // B
}
}
inFile.close();
}