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; }
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); }