+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+# pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+# This software is governed by the CeCILL-B license under French law and
+# abiding by the rules of distribution of free software. You can use,
+# modify and/ or redistribute the software under the terms of the CeCILL-B
+# license as circulated by CEA, CNRS and INRIA at the following URL
+# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+# or in the file LICENSE.txt.
+#
+# As a counterpart to the access to the source code and rights to copy,
+# modify and redistribute granted by the license, users are provided only
+# with a limited warranty and the software's author, the holder of the
+# economic rights, and the successive licensors have only limited
+# liability.
+#
+# The fact that you are presently reading this means that you have had
+# knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
+
#include "Transparency.h"
void Transparency::createImage(vtkImageData *img1, vtkImageData *img2, int sizeX, int sizeY)
{
- int i, j;
+// int i, j; EED ???
+
if(_type == VTK_CHAR)
{
//POINTERS:
char* dataImagePointer2 = NULL;
char* dataImageResultPointer = NULL;
- dataImagePointer1 = (char*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (char*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (char*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (char*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (char*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (char*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (char)*dataImagePointer1*_percent + (char)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_SIGNED_CHAR)
{
signed char* dataImagePointer2 = NULL;
signed char* dataImageResultPointer = NULL;
- dataImagePointer1 = (signed char*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (signed char*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (signed char*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (signed char*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (signed char*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (signed char*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (signed char)*dataImagePointer1*_percent + (signed char)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_UNSIGNED_CHAR)
{
unsigned char* dataImagePointer2 = NULL;
unsigned char* dataImageResultPointer = NULL;
- dataImagePointer1 = (unsigned char*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (unsigned char*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (unsigned char*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (unsigned char*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (unsigned char*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (unsigned char*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (unsigned char)*dataImagePointer1*_percent + (unsigned char)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_SHORT)
{
short* dataImagePointer2 = NULL;
short* dataImageResultPointer = NULL;
- dataImagePointer1 = (short*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (short*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (short*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (short*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (short*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (short*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (short)*dataImagePointer1*_percent + (short)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_UNSIGNED_SHORT)
{
unsigned short* dataImagePointer2 = NULL;
unsigned short* dataImageResultPointer = NULL;
- dataImagePointer1 = (unsigned short*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (unsigned short*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (unsigned short*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (unsigned short*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (unsigned short*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (unsigned short*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (unsigned short)*dataImagePointer1*_percent + (unsigned short)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_INT)
{
int* dataImagePointer2 = NULL;
int* dataImageResultPointer = NULL;
- dataImagePointer1 = (int*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (int*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (int*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (int*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (int*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (int*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (int)*dataImagePointer1*_percent + (int)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_UNSIGNED_INT)
{
unsigned int* dataImagePointer2 = NULL;
unsigned int* dataImageResultPointer = NULL;
- dataImagePointer1 = (unsigned int*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (unsigned int*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (unsigned int*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (unsigned int*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (unsigned int*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (unsigned int*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (unsigned int)*dataImagePointer1*_percent + (unsigned int)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_LONG)
{
long* dataImagePointer2 = NULL;
long* dataImageResultPointer = NULL;
- dataImagePointer1 = (long*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (long*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (long*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (long*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (long*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (long*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (long)*dataImagePointer1*_percent + (long)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_UNSIGNED_LONG)
{
unsigned long* dataImagePointer2 = NULL;
unsigned long* dataImageResultPointer = NULL;
- dataImagePointer1 = (unsigned long*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (unsigned long*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (unsigned long*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (unsigned long*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (unsigned long*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (unsigned long*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (unsigned long)*dataImagePointer1*_percent + (unsigned long)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_FLOAT)
{
float* dataImagePointer2 = NULL;
float* dataImageResultPointer = NULL;
- dataImagePointer1 = (float*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (float*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (float*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
- {
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (float*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (float*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (float*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (float)*dataImagePointer1*_percent + (float)*dataImagePointer2*(1-_percent);
- }
- }
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
}
else if(_type == VTK_DOUBLE)
{
double* dataImagePointer1 = NULL;
double* dataImagePointer2 = NULL;
double* dataImageResultPointer = NULL;
+
+ createImageByType(dataImagePointer1, dataImagePointer2, dataImageResultPointer, img1, img2, sizeX, sizeY);
+ }
+
+ _newImage->Update();
+}
+
+template <class T>
+void Transparency::createImageByType(T* dataImagePointer1, T* dataImagePointer2, T* dataImageResultPointer, vtkImageData *img1, vtkImageData *img2, int sizeX, int sizeY)
+{
+ int i, j;
- dataImagePointer1 = (double*) img1->GetScalarPointer(0,0,0);
- dataImagePointer2 = (double*) img2->GetScalarPointer(0,0,0);
- dataImageResultPointer = (double*) _newImage->GetScalarPointer(0,0,0);
- for(i = 0; i < sizeX; i++)
+ dataImagePointer1 = (T*) img1->GetScalarPointer(0,0,0);
+ dataImagePointer2 = (T*) img2->GetScalarPointer(0,0,0);
+ dataImageResultPointer = (T*) _newImage->GetScalarPointer(0,0,0);
+ for(i = 0; i < sizeX; i++)
+ {
+ for(j = 0; j < sizeY; j++)
{
- for(j = 0; j < sizeY; j++)
- {
- dataImagePointer1 = (double*)img1->GetScalarPointer(i,j,0);
- dataImagePointer2 = (double*)img2->GetScalarPointer(i,j,0);
- dataImageResultPointer = (double*)_newImage->GetScalarPointer(i,j,0);
-
- *dataImageResultPointer = (double)*dataImagePointer1*_percent + (double)*dataImagePointer2*(1-_percent);
- }
+ dataImagePointer1 = (T*)img1->GetScalarPointer(i,j,0);
+ dataImagePointer2 = (T*)img2->GetScalarPointer(i,j,0);
+ dataImageResultPointer = (T*)_newImage->GetScalarPointer(i,j,0);
+
+ *dataImageResultPointer = (T)*dataImagePointer1*_percent + (T)*dataImagePointer2*(1-_percent);
}
}
-
- _newImage->Update();
}
/*
void Transparency::setPercent(int percent)
{
_percent=(double)percent/100.0;
-}
\ No newline at end of file
+}
+