void DatVolumeWriter::write(const std::string& filename, const VolumeBase* volumeHandle) throw (tgt::IOException) { tgtAssert(volumeHandle, "No volume handle"); const VolumeRAM* volume = volumeHandle->getRepresentation<VolumeRAM>(); if (!volume) { LWARNING("No volume"); return; } std::string datname = filename; std::string rawname = getFileNameWithoutExtension(filename) + ".raw"; LINFO("saving " << datname << " and " << rawname); std::fstream datout(datname.c_str(), std::ios::out); std::fstream rawout(rawname.c_str(), std::ios::out | std::ios::binary); if (!datout.is_open() || !rawout.is_open() || datout.bad() || rawout.bad()) throw tgt::IOException(); datout << getDatFileString(volumeHandle, rawname); if (datout.bad()) throw tgt::IOException(); datout.close(); // write raw file const char* data = static_cast<const char*>(volume->getData()); size_t numbytes = volume->getNumBytes(); rawout.write(data, numbytes); if (rawout.bad()) throw tgt::IOException(); rawout.close(); }
void con_charout(char c) { char tmp = c; static int InCmd; #ifdef CONFIG_BIOS_VT52 if (InCmd) CommandChar(c); if (c == 27) { InCmd=1; return; } #endif /* \n\r handling */ if (c == '\n') con_charout('\r'); rawout(c); }
void NrrdVolumeWriter::write(const std::string& filename, const VolumeHandleBase* volumeHandle) throw (tgt::IOException) { tgtAssert(volumeHandle, "No volume handle"); const Volume* volume = volumeHandle->getRepresentation<Volume>(); if (!volume) { LWARNING("No volume"); return; } std::string nhdrname = filename; std::string rawname = getFileNameWithoutExtension(filename) + ".raw"; LINFO("saving " << nhdrname << " and " << rawname); std::fstream nhdrout(nhdrname.c_str(), std::ios::out); std::fstream rawout(rawname.c_str(), std::ios::out | std::ios::binary); if (nhdrout.bad() || rawout.bad()) { LWARNING("Can't open file"); throw tgt::IOException(); } // write nrrd header std::string type; const char* data = 0; size_t numbytes = 0; if (const VolumeUInt8* vol = dynamic_cast<const VolumeUInt8*>(volume)) { type = "uchar"; data = reinterpret_cast<const char*>(vol->voxel()); numbytes = vol->getNumBytes(); } else if (const VolumeUInt16* vol = dynamic_cast<const VolumeUInt16*>(volume)) { type = "ushort"; data = reinterpret_cast<const char*>(vol->voxel()); numbytes = vol->getNumBytes(); } else if (const Volume4xUInt8* vol = dynamic_cast<const Volume4xUInt8*>(volume)) { type = "uint"; data = reinterpret_cast<const char*>(vol->voxel()); numbytes = vol->getNumBytes(); } else LERROR("Format currently not supported"); tgt::ivec3 dimensions = volumeHandle->getDimensions(); tgt::vec3 spacing = volumeHandle->getSpacing(); nhdrout << "NRRD0001" << std::endl; // magic number nhdrout << "content: " << tgt::FileSystem::fileName(filename) << std::endl; nhdrout << "dimension: 3" << std::endl; nhdrout << "type: " << type << std::endl; nhdrout << "sizes: " << dimensions.x << " " << dimensions.y << " " << dimensions.z << std::endl; nhdrout << "spacings: " << spacing.x << " " << spacing.y << " " << spacing.z << std::endl; nhdrout << "datafile: " << tgt::FileSystem::fileName(rawname) << std::endl; nhdrout << "encoding: raw" << std::endl; nhdrout.close(); // write raw file rawout.write(data, numbytes); rawout.close(); }