//==================================================================
void HiderSampleCoordsBuffer::Init( u_int wd, u_int he, u_int subPixelDimLog2 )
{
	mWd = wd;
	mHe = he;
	mSubPixelDimLog2 = subPixelDimLog2;

	u_int	sampsPerPixel = 1 << (subPixelDimLog2*2);

	size_t	sampArrSize = (size_t)mWd * (size_t)mHe * sampsPerPixel;

	mpSampCoords = DNEW HiderSampleCoords [ sampArrSize ];
	mpBaseSampCoords = DNEW HiderBaseSampleCoords [ sampArrSize ];

	DUT::RandMT	randGen( (U32)0x11112222 );

	size_t sampsCnt = 0;
	for (u_int y=0; y < mHe; ++y)
	{
		for (u_int x=0; x < mWd; ++x, sampsCnt += sampsPerPixel)
		{
			initPixel(
				mpSampCoords + sampsCnt,
				mpBaseSampCoords + sampsCnt,
				subPixelDimLog2,
				randGen );
		}
	}
}
Beispiel #2
0
simp* copyImage(simp *first, FILE *binary)
{
	unsigned char a;
	unsigned char b;
	unsigned char c;
	unsigned char d;
	int row;
	int col;
	pixel pix;

	for(row = 0; row < first->height; row++)
	{
		if(feof(binary))
		{
			break;
		}
			for(col = 0; col < first->width; col++)
			{
				if(feof(binary))
				{
					break;
				}
				fread(&a, 1, 1, binary);
				fread(&b, 1, 1, binary);
				fread(&c, 1, 1, binary);
				fread(&d, 1, 1, binary);
				pix = initPixel(a,b,c,d);
				first->pixArray[row][col] = pix;
			}
		}

	return first;
}
Beispiel #3
0
void overlayfunction(simp* first, simp* second, int starty, int startx)
{
	int i;
	int j;
	int counter;
	int k;
	int l;
	
	int innerstartx;
	int innerstarty;
	int ydifference;
	
	innerstartx = startx;
	innerstarty = starty;
	
	if(innerstarty > first->height)
	{
		return;
	}
	
	if(innerstartx > first->width)
	{
		return;
	}
	
	if(innerstarty < 0 && innerstartx < 0)
	{
		int difference;
		difference = 0 - innerstartx;
		ydifference = 0 - innerstarty;
		if(difference > second->width || ydifference > second->height)
		{
			return;
		}
		
		k = ydifference;
		for(i = 0; i < second->height - ydifference; i++)
		{
			l = difference;
			for(j = 0; j < second->width - difference ; j++)
			{
				unsigned char r1 = first->pixArray[i][j].r;
				unsigned char g1 = first->pixArray[i][j].g;
				unsigned char b1 = first->pixArray[i][j].b;
				unsigned char a1 = first->pixArray[i][j].a;
			
				unsigned char r2 = second->pixArray[k][l].r;
				unsigned char g2 = second->pixArray[k][l].g;
				unsigned char b2 = second->pixArray[k][l].b;
				unsigned char a2 = second->pixArray[k][l].a;

				if (a2 == 255)
				{
					first->pixArray[i][j].r = r2;
					first->pixArray[i][j].g = g2;
					first->pixArray[i][j].b = b2;
				}
				
				if (a2 < 255 && a2 > -1)
				{
	
					unsigned char newr = ( ( (a2) * (r2) ) /255.0 ) +  ((( a1 * r1) * (255 - a2))/65025.0);
					unsigned char newg = ( ( (a2) * (g2) ) /255.0 ) +  ((( a1 * g1) * (255 - a2))/65025.0);
					unsigned char newb = ( ( (a2) * (b2) ) /255.0 ) +  ((( a1 * b1) * (255 - a2))/65025.0);
					unsigned char newa = ( ( (a2) /255.0 )  + (((255 - a2) * a1)/65025.0 ) ) * 255;
					pixel newpixel = initPixel(newr,newg,newb,newa);
					first->pixArray[i][j] = newpixel;
				}
				l++;
			}
			k++;
		}
		return;
	}
	
	if(innerstartx < 0)
	{
		int difference;
		difference = 0 - innerstartx;
		if(difference > second->width)
		{
			return;
		}
		
		for(i = innerstarty; i < innerstarty + second->height; i++)
		{
			k = difference;
			for(j = 0; j < second->width - difference; j++)
			{
				unsigned char r1 = first->pixArray[i][j].r;
				unsigned char g1 = first->pixArray[i][j].g;
				unsigned char b1 = first->pixArray[i][j].b;
				unsigned char a1 = first->pixArray[i][j].a;
			
				unsigned char r2 = second->pixArray[i-innerstarty][k].r;
				unsigned char g2 = second->pixArray[i-innerstarty][k].g;
				unsigned char b2 = second->pixArray[i-innerstarty][k].b;
				unsigned char a2 = second->pixArray[i-innerstarty][k].a;

				if (a2 == 255)
				{
					first->pixArray[i][j].r = r2;
					first->pixArray[i][j].g = g2;
					first->pixArray[i][j].b = b2;
				}
				
				if (a2 < 255 && a2 > -1)
				{
	
					unsigned char newr = ( ( (a2) * (r2) ) /255.0 ) +  ((( a1 * r1) * (255 - a2))/65025.0);
					unsigned char newg = ( ( (a2) * (g2) ) /255.0 ) +  ((( a1 * g1) * (255 - a2))/65025.0);
					unsigned char newb = ( ( (a2) * (b2) ) /255.0 ) +  ((( a1 * b1) * (255 - a2))/65025.0);
					unsigned char newa = ( ( (a2) /255.0 )  + (((255 - a2) * a1)/65025.0 ) ) * 255;
					pixel newpixel = initPixel(newr,newg,newb,newa);
					first->pixArray[i][j] = newpixel;
				}
				k++;
			}
		}
		return;
	}
	
	if(innerstarty < 0)
	{
		int difference;
		difference = 0 - innerstarty;
		if(difference > second->height)
		{
			return;
		}
		
		k = difference;
		for(i = 0; i < second->height - difference; i++)
		{
			for(j = innerstartx; j < innerstartx + second->width ; j++)
			{
				unsigned char r1 = first->pixArray[i][j].r;
				unsigned char g1 = first->pixArray[i][j].g;
				unsigned char b1 = first->pixArray[i][j].b;
				unsigned char a1 = first->pixArray[i][j].a;
			
				unsigned char r2 = second->pixArray[k][j-innerstartx].r;
				unsigned char g2 = second->pixArray[k][j-innerstartx].g;
				unsigned char b2 = second->pixArray[k][j-innerstartx].b;
				unsigned char a2 = second->pixArray[k][j-innerstartx].a;

				if (a2 == 255)
				{
					first->pixArray[i][j].r = r2;
					first->pixArray[i][j].g = g2;
					first->pixArray[i][j].b = b2;
				}
				
				if (a2 < 255 && a2 > -1)
				{
	
					unsigned char newr = ( ( (a2) * (r2) ) /255.0 ) +  ((( a1 * r1) * (255 - a2))/65025.0);
					unsigned char newg = ( ( (a2) * (g2) ) /255.0 ) +  ((( a1 * g1) * (255 - a2))/65025.0);
					unsigned char newb = ( ( (a2) * (b2) ) /255.0 ) +  ((( a1 * b1) * (255 - a2))/65025.0);
					unsigned char newa = ( ( (a2) /255.0 )  + (((255 - a2) * a1)/65025.0 ) ) * 255;
					pixel newpixel = initPixel(newr,newg,newb,newa);
					first->pixArray[i][j] = newpixel;
				}
			}
			k++;
		}
		return;
	}
	
	
	for(i = innerstarty; i < starty + second->height && i < first->height; i++)
	{
		for(j = innerstartx; j < innerstartx + second->width && j < first->width; j++)
		{
			unsigned char r1;
			unsigned char g1;
			unsigned char b1;
			unsigned char a1;
			
			unsigned char r2;
			unsigned char g2;
			unsigned char b2;
			unsigned char a2;
		
			if(j >= first->width)
			{
				return;
			}
			
			r1 = first->pixArray[i][j].r;
			g1 = first->pixArray[i][j].g;
			b1 = first->pixArray[i][j].b;
			a1 = first->pixArray[i][j].a;
			
			r2 = second->pixArray[i-innerstarty][j-innerstartx].r;
			g2 = second->pixArray[i-innerstarty][j-innerstartx].g;
			b2 = second->pixArray[i-innerstarty][j-innerstartx].b;
			a2 = second->pixArray[i-innerstarty][j-innerstartx].a;

			if (second->pixArray[i-innerstarty][j-innerstartx].a == 255)
			{
				first->pixArray[i][j].r = r2;
				first->pixArray[i][j].g = g2;
				first->pixArray[i][j].b = b2;
			}
			
			if (second->pixArray[i-innerstarty][j-innerstartx].a < 255 && second->pixArray[i-innerstarty][j-innerstartx].a > -1)
			{

				unsigned char newr = ( ( (a2) * (r2) ) /255.0 ) +  ((( a1 * r1) * (255 - a2))/65025.0);
				unsigned char newg = ( ( (a2) * (g2) ) /255.0 ) +  ((( a1 * g1) * (255 - a2))/65025.0);
				unsigned char newb = ( ( (a2) * (b2) ) /255.0 ) +  ((( a1 * b1) * (255 - a2))/65025.0);
				unsigned char newa = ( ( (a2) /255.0 )  + (((255 - a2) * a1)/65025.0 ) ) * 255;
				pixel newpixel = initPixel(newr,newg,newb,newa);
				first->pixArray[i][j] = newpixel;
			}
		
		}
	}
}