Example #1
0
int Ccps_file::extract_as_pcx(const string& name, const t_palet _palet) const
{
	t_palet palet;
	if (has_palet())
		memcpy(palet, get_palet(), sizeof(t_palet));
	else
		memcpy(palet, _palet, sizeof(t_palet));
	convert_palet_18_to_24(palet);
	byte* image = new byte[320 * 200];
	decode80(get_image(), image);
	byte* d = new byte[320 * 200 * 2];
	int cb_d = pcx_encode(image, d, 320, 200, 1);
	Cpcx_file_write f;
	int error = f.open_write(name);
	if (!error)
	{
		f.set_size(320, 200, 1);
		error = f.write_header();
	}
	if (!error)
		error = f.write_image(d, cb_d);
	if (!error)
		error = f.write_palet(palet);
	f.close();
	delete[] d;
	delete[] image;
	return error;
}
Example #2
0
int Cvxl_file::extract_as_xif(const string& name) const
{
	Cxif_key k;
	Cxif_key& header = k.open_key_write(vi_header);
	Cxif_key& palet = header.open_key_write(vi_palet);
	int i;
	for (i = 0; i < 256; i++)
	{
		Cxif_key& palet_entry = palet.open_key_write(i);
		palet_entry.set_value_int(vi_red, get_palet()[i].r);
		palet_entry.set_value_int(vi_green, get_palet()[i].g);
		palet_entry.set_value_int(vi_blue, get_palet()[i].b);
	}
	Cxif_key& body = k.open_key_write(vi_body);
	for (i = 0; i < get_c_section_headers(); i++)
	{
		const t_vxl_section_header& section_header = *get_section_header(i);
		const t_vxl_section_tailer& section_tailer = *get_section_tailer(i);
		const int cx = section_tailer.cx;
		const int cy = section_tailer.cy;
		const int cz = section_tailer.cz;
		Cxif_key& section = body.open_key_write(i);
		Cxif_key& header = section.open_key_write(vi_header);
		header.set_value_string(vi_id, section_header.id);
		Cxif_key& body = section.open_key_write(vi_body);	
		int j = 0;
		for (int y = 0; y < cy; y++)
		{
			Cxif_key& yi = body.open_key_write(y);
			for (int x = 0; x < cx; x++)
			{
				Cxif_key& xi = yi.open_key_write(x);
				const byte* r = get_span_data(i, j);
				if (r)
				{
					int z = 0;
					while (z < cz)
					{
						z += *r++;
						int c = *r++;
						while (c--)
						{
							Cxif_key& zi = xi.open_key_write(z);
							zi.set_value_int(vi_color, *r++);
							zi.set_value_int(vi_surface_normal, *r++);
							z++;
						}
						r++;
					}
				}
				j++;
			}
		}
		Cxif_key& tailer = section.open_key_write(vi_tailer);	
		tailer.set_value_int(vi_x_min, section_tailer.x_min_scale * 1000000);
		tailer.set_value_int(vi_y_min, section_tailer.y_min_scale * 1000000);
		tailer.set_value_int(vi_z_min, section_tailer.z_min_scale * 1000000);
		tailer.set_value_int(vi_x_max, section_tailer.x_max_scale * 1000000);
		tailer.set_value_int(vi_y_max, section_tailer.y_max_scale * 1000000);
		tailer.set_value_int(vi_z_max, section_tailer.z_max_scale * 1000000);
		tailer.set_value_int(vi_cx, cx);
		tailer.set_value_int(vi_cy, cy);
		tailer.set_value_int(vi_cz, cz);
	}
	return k.vdata().save(name);
}