Example #1
0
void toBitmap(const Buffer2D& in,cl::CommandQueue & q, const char* filename)
{
	std::ofstream out(filename,std::ios::binary);
	if (!out) throw std::runtime_error(std::string(filename) + " does not exists");

	BidimArray<real> ans = in.read(q);

	BitmapFileHeader fileHeader;
	BitmapInfoHeader infoHeader;

	assert(sizeof(BitmapFileHeader) == 14);
	assert(sizeof(BitmapInfoHeader) == 40);

	int dimx = in.width() + (4-in.width()%4)%4;

	fileHeader.Signature = 19778;
	fileHeader.Size = sizeof(BitmapFileHeader)+sizeof(BitmapInfoHeader)+ sizeof(char)*dimx*in.height()+256*4;
	fileHeader.Reserved1 = fileHeader.Reserved2 = 0;
	fileHeader.BitsOffset = sizeof(BitmapFileHeader)+sizeof(BitmapInfoHeader)+256*4;

	infoHeader.HeaderSize = sizeof(BitmapInfoHeader);
	infoHeader.Width = in.width();
	infoHeader.Height = in.height();
	infoHeader.Planes = 1;
	infoHeader.BitCount = 8;
	infoHeader.Compression = 0;
	infoHeader.SizeImage = dimx*in.height();
	infoHeader.PelsPerMeterX = 1;
	infoHeader.PelsPerMeterY = 1;
	infoHeader.ClrUsed = 256;
	infoHeader.ClrImportant = 256;

	out.write(reinterpret_cast<char*>(&fileHeader),sizeof(BitmapFileHeader));
	out.write(reinterpret_cast<char*>(&infoHeader),sizeof(BitmapInfoHeader));

	for (int i=0;i < 256;++i)
	{
		char b[4] = {i,i,i,i};
		out.write(b,sizeof(b));
	}

	BidimArray<char> buf (dimx,in.height());

	real l_norm = LInfNorm(in,q);


	for (int j=0;j < buf.height();++j)
	{
		for (int i=0;i < ans.width();++i)
			buf(i,j) =  255*fabs(ans(i,j))/l_norm;
		for (int i= ans.width();i < buf.width();++i)
			buf(i,j) = 0;
	}
	out.write(buf.data(), sizeof(char)*buf.height()*buf.width());
}
Example #2
0
//-----------------------------------------------------------------------------
// TestMatrixLInfNorm
//-----------------------------------------------------------------------------
bool TestMatrixLInfNorm()
{
   Matrix A("1,2,3;4,5,6;7,8,9");

   return ApproxEqual( LInfNorm(A), 24.0, TOLERANCE);
}