aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Native/Tester/Tester.cpp
blob: 584e40e4bad96d1de424d545fc6591a40027ea74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace Tango.SharedUI.Converters
{
    public class OneToPercentConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return System.Convert.ToDouble(value) * 100d;
        }

        public object ConvertBack(object value
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream> 
#include "CalibrationPoint.pb-c.h"
#include "CalibrationData.pb-c.h"
#include "ColorSpace.pb-c.h"
#include "ConversionInput.pb-c.h"
#include "ConversionOutput.pb-c.h"
#include "InputCoordinates.pb-c.h"
#include "OutputCoordinates.pb-c.h"
#include "OutputLiquid.pb-c.h"
#include "InputLiquid.pb-c.h"
#include "Exports.h"

size_t ReadCalData(char *name, double **&CalData, long &nCalData);
size_t ReadCLUTFile(char *name, uint8_t *&buffer, long &lsize);

size_t InitData(uint8_t *&input_buffer, long &buffersize, char *ForwardName, char *InverseName,
	char * CalCyanName, char *CalMagentaName, char *CalYellowName)
{
	ConversionInput *conversionInput = (ConversionInput*)malloc(sizeof(ConversionInput));
	conversion_input__init(conversionInput);//CONVERSION_INPUT__INIT;
											//fill conversionInput
	conversionInput->colorspace = COLOR_SPACE__RGB;
	conversionInput->has_colorspace = true;
	conversionInput->has_forwarddata = true;
	conversionInput->has_inversedata = true;
	conversionInput->has_threadl = true;
	conversionInput->has_threada = true;
	conversionInput->has_threadb = true;
	conversionInput->threadl = 90.5055;
	conversionInput->threada = 2.8998;;
	conversionInput->threadb = -11.4028;
	conversionInput->segmentlength = 10;
	uint8_t *buffer = NULL;
	long lsize;
	size_t retVal = ReadCLUTFile(ForwardName, buffer, lsize);
	conversionInput->forwarddata.data = buffer;
	conversionInput->forwarddata.len = lsize;
	retVal = ReadCLUTFile(InverseName, buffer, lsize);
	conversionInput->inversedata.data = buffer;
	conversionInput->inversedata.len = lsize;

	//Input Coordinates

	InputCoordinates *inputcoordinates = (InputCoordinates *)malloc(sizeof(InputCoordinates));
	input_coordinates__init(inputcoordinates);
	inputcoordinates->has_red = true;
	inputcoordinates->has_green = true;
	inputcoordinates->has_blue = true;
	inputcoordinates->red = 128;
	inputcoordinates->green = 128;
	inputcoordinates->blue = 128;
	/*	inputcoordinates->has_l = true;
	inputcoordinates->has_a = true;
	inputcoordinates->has_b = true;
	inputcoordinates->l = 50.00;
	inputcoordinates->a = 0.00;
	inputcoordinates->b = 0.00;*/
	//Ink Data

	inputcoordinates->n_inputliquids = 3;
	InputLiquid **inputliquids = (InputLiquid **)malloc(sizeof(InputLiquid *)*(inputcoordinates->n_inputliquids));
	//	input_liquid__init(*inputliquids);
	for (size_t i = 0; i < inputcoordinates->n_inputliquids; ++i)
	{
		inputliquids[i] = (InputLiquid *)malloc(sizeof(InputLiquid));
		input_liquid__init(inputliquids[i]);
	}
	//Cyan
	double **CalData = NULL;
	long nCalData;
	InputLiquid *inputliquidCyan = (InputLiquid *)malloc(sizeof(InputLiquid));
	input_liquid__init(inputliquidCyan);
	inputliquidCyan->volume = 25.0;
	inputliquidCyan->has_volume = true;
	CalibrationData *CalibDataCyan = (CalibrationData*)malloc(sizeof(CalibrationData));
	calibration_data__init(CalibDataCyan);
	retVal = ReadCalData(CalCyanName, CalData, nCalData);
	CalibDataCyan->has_liquidtype = true;
	CalibDataCyan->liquidtype = LIQUID_TYPE__Cyan;
	CalibDataCyan->n_calibrationpoints = nCalData;
	CalibrationPoint **CalPointsCyan = (CalibrationPoint **)malloc(sizeof(CalibrationPoint *)* nCalData);
	//CalibrationPoint* CP = (CalibrationPoint *)malloc(sizeof(CalibrationPoint ));
	//calibration_point__init(CP);
	for (int i = 0; i<nCalData; ++i)
	{
		CalPointsCyan[i] = (CalibrationPoint *)malloc(sizeof(CalibrationPoint));
		calibration_point__init(CalPointsCyan[i]);
		CalPointsCyan[i]->has_x = true;
		CalPointsCyan[i]->has_y = true;
		CalPointsCyan[i]->x = CalData[i][0];
		CalPointsCyan[i]->y = CalData[i][1];
	}
	CalibDataCyan->calibrationpoints = CalPointsCyan;
	inputliquidCyan->calibrationdata = CalibDataCyan;
	inputliquidCyan->has_maxnanoliterpercentimeter = true;
	inputliquidCyan->maxnanoliterpercentimeter = 200;
	inputliquidCyan->liquidtype = LIQUID_TYPE__Cyan;
	//Magenta
	InputLiquid *inputliquidMagenta = (InputLiquid *)malloc(sizeof(InputLiquid));
	input_liquid__init(inputliquidMagenta);
	inputliquidMagenta->volume = 30.0;
	inputliquidMagenta->has_volume = true;
	CalibrationData *CalibDataMagenta = (CalibrationData*)malloc(sizeof(CalibrationData));
	calibration_data__init(CalibDataMagenta);
	retVal = ReadCalData(CalMagentaName, CalData, nCalData);
	CalibDataMagenta->has_liquidtype = true;
	CalibDataMagenta->liquidtype = LIQUID_TYPE__Magenta;
	CalibDataMagenta->n_calibrationpoints = nCalData;
	CalibrationPoint **CalPointsMagenta = (CalibrationPoint **)malloc(sizeof(CalibrationPoint *)* nCalData);
	//	calibration_point__init(*CalPointsMagenta);
	for (int i = 0; i<nCalData; ++i)
	{
		CalPointsMagenta[i] = (CalibrationPoint *)malloc(sizeof(CalibrationPoint));
		calibration_point__init(CalPointsMagenta[i]);
		CalPointsMagenta[i]->has_x = true;
		CalPointsMagenta[i]->has_y = true;
		CalPointsMagenta[i]->x = CalData[i][0];
		CalPointsMagenta[i]->y = CalData[i][1];
	}
	CalibDataMagenta->calibrationpoints = CalPointsMagenta;
	inputliquidMagenta->calibrationdata = CalibDataMagenta;
	inputliquidMagenta->has_maxnanoliterpercentimeter = true;
	inputliquidMagenta->maxnanoliterpercentimeter = 200;
	inputliquidMagenta->liquidtype = LIQUID_TYPE__Magenta;
	//Yellow
	InputLiquid *inputliquidYellow = (InputLiquid *)malloc(sizeof(InputLiquid));
	input_liquid__init(inputliquidYellow);
	inputliquidYellow->volume = 30.0;
	inputliquidYellow->has_volume = true;
	CalibrationData *CalibDataYellow = (CalibrationData*)malloc(sizeof(CalibrationData));
	calibration_data__init(CalibDataYellow);

	retVal = ReadCalData(CalYellowName, CalData, nCalData);
	CalibDataYellow->has_liquidtype = true;
	CalibDataYellow->liquidtype = LIQUID_TYPE__Yellow;
	CalibDataYellow->n_calibrationpoints = nCalData;
	CalibrationPoint **CalPointsYellow = (CalibrationPoint **)malloc(sizeof(CalibrationPoint *)* nCalData);
	//	calibration_point__init(*CalPointsYellow);
	for (int i = 0; i<nCalData; ++i)
	{
		CalPointsYellow[i] = (CalibrationPoint *)malloc(sizeof(CalibrationPoint));
		calibration_point__init(CalPointsYellow[i]);
		CalPointsYellow[i]->has_x = true;
		CalPointsYellow[i]->has_y = true;
		CalPointsYellow[i]->x = CalData[i][0];
		CalPointsYellow[i]->y = CalData[i][1];
	}
	CalibDataYellow->calibrationpoints = CalPointsYellow;
	inputliquidYellow->calibrationdata = CalibDataYellow;
	inputliquidYellow->has_maxnanoliterpercentimeter = true;
	inputliquidYellow->maxnanoliterpercentimeter = 200;
	inputliquidYellow->liquidtype = LIQUID_TYPE__Yellow;
	inputliquids[0] = inputliquidCyan;
	inputliquids[1] = inputliquidMagenta;
	inputliquids[2] = inputliquidYellow;
	inputcoordinates->inputliquids = inputliquids;
	conversionInput->inputcoordinates = inputcoordinates;

	buffersize = conversion_input__get_packed_size(conversionInput);

	input_buffer = (uint8_t*)malloc(buffersize);
	conversion_input__pack(conversionInput, input_buffer);
	return retVal;
}

size_t ReadCLUTFile(char *name, uint8_t *&buffer, long &lSize)
{
	FILE * pFile;
	size_t result;

	errno_t err = fopen_s(&pFile, name, "rb");
	if (err)
		return false;
	if (pFile == NULL) { fputs("File error", stderr); exit(1); }
	// obtain file size:
	fseek(pFile, 0, SEEK_END);
	lSize = ftell(pFile);
	rewind(pFile);

	// allocate memory to contain the whole file:
	uint8_t *tmp_buffer = (uint8_t*)malloc(sizeof(uint8_t)*lSize);
	if (tmp_buffer == NULL) { fputs("Memory error", stderr); exit(2); }

	// copy the file into the buffer:
	result = fread(tmp_buffer, 1, lSize, pFile);
	if (result != lSize) { fputs("Reading error", stderr); exit(3); }

	/* the whole file is now loaded in the memory buffer. */
	// terminate
	buffer = tmp_buffer;
	fclose(pFile);
	return(0);
}

size_t ReadCalData(char *name, double **&CalData, long &nCalData)
{
	size_t retVal = 0;
	double scaleData = (pow(2, 32) - 1) / 100;
	FILE * pFile;
	//pFile = fopen(name, "rb");
	errno_t err = fopen_s(&pFile, name, "rb");

	if (pFile == NULL) { fputs("Calibration File error", stderr); exit(1); }
	// obtain file size:
	fseek(pFile, 0, SEEK_END);
	long lSize = ftell(pFile);
	rewind(pFile);
	// allocate memory to contain the whole file:
	int lSize4 = lSize / 4;
	unsigned int *buffer = new unsigned int[lSize4];
	if (buffer == NULL) { fputs("Calibration Memory error", stderr); exit(2); }

	// copy the file into the buffer:
	size_t result = fread(buffer, 4, lSize4, pFile);
	if (result != lSize4)
	{
		fputs("Calibration Reading error", stderr);
		fclose(pFile);
		pFile = NULL;
		exit(3);
	}
	// dynamically allocate pair array
	int lSize4H = lSize4 / 2;
	double **tmpData = new double*[lSize4H];
	nCalData = lSize4H;
	if (tmpData == NULL)
	{
		fputs("Calibration Allocation error", stderr);
		fclose(pFile);
		pFile = NULL;
		exit(4);
	}
	for (int count = 0; count < lSize4H; count++)
	{
		tmpData[count] = new double[2];
		if (tmpData[count] == NULL)
		{
			fputs(" Calibration Allocation error", stderr); exit(4);
		}
	}
	for (int count = 0; count < lSize4H; count++)
	{
		tmpData[count][0] = (double)buffer[2 * count] / scaleData;
		tmpData[count][1] = (double)buffer[2 * count + 1] / scaleData;
	}
	CalData = tmpData;
	fclose(pFile);
	return(retVal);
}

int main()
{
	char *ForwardName = new char[256];
	strcpy_s(ForwardName, 256, "..\\..\\..\\ColorData\\CCT\\test.cct");
	
	char *InverseName = new char[256];
	strcpy_s(InverseName, 256, "..\\..\\..\\ColorData\\CCT\\B2A_Lin.cct");

	char *CalCyanName = new char[256];
	strcpy_s(CalCyanName, 256, "..\\..\\..\\ColorData\\CAT\\CyanToLinear.cat");
	char *CalMagentaName = new char[256];
	strcpy_s(CalMagentaName, 256, "..\\..\\..\\ColorData\\CAT\\MagentaToLinear.cat");
	char *CalYellowName = new char[256];
	strcpy_s(CalYellowName, 256, "..\\..\\..\\ColorData\\CAT\\YellowToLinear.cat");

	uint8_t *input_buffer = NULL;
	long bufferSize = 0;
	size_t retVal = InitData(input_buffer, bufferSize, ForwardName, InverseName, CalCyanName, CalMagentaName, CalYellowName);
	if (retVal > 0) exit(1);

	
	uint8_t *output_buffer;
	size_t size = Convert(input_buffer, bufferSize, output_buffer);
	ConversionOutput* conversionOutput = (ConversionOutput*)malloc(sizeof(ConversionOutput));
	conversionOutput = conversion_output__unpack(NULL, size, output_buffer);
}