25 #include <core/exception.h>
26 #include <core/exceptions/system.h>
27 #include <utils/system/console_colors.h>
29 #include <fvutils/writers/compressed.h>
30 #include <fvutils/compression/imagecompressor.h>
36 namespace firevision {
55 filename = strdup(
"");
59 image_compressor = ic;
64 CompressedImageWriter::~CompressedImageWriter()
71 CompressedImageWriter::set_filename(
const char *filename)
74 this->filename = strdup(filename);
76 if ( image_compressor != NULL ) {
77 image_compressor->set_filename( filename );
83 CompressedImageWriter::set_dimensions(
unsigned int width,
unsigned int height)
86 this->height = height;
87 if ( image_compressor != NULL ) {
88 image_compressor->set_image_dimensions( width, height );
94 CompressedImageWriter::set_buffer(colorspace_t cspace,
unsigned char *buffer)
96 this->cspace = cspace;
97 this->buffer = buffer;
98 if ( image_compressor != NULL ) {
99 image_compressor->set_image_buffer( cspace, buffer );
105 CompressedImageWriter::write()
107 if ( image_compressor != NULL ) {
108 if ( image_compressor->supports_compression_destination( ImageCompressor::COMP_DEST_FILE ) ) {
109 image_compressor->set_compression_destination( ImageCompressor::COMP_DEST_FILE );
110 image_compressor->compress();
111 }
else if ( image_compressor->supports_compression_destination( ImageCompressor::COMP_DEST_MEM ) ) {
112 image_compressor->set_compression_destination( ImageCompressor::COMP_DEST_MEM );
113 unsigned int comp_buffer_size = image_compressor->recommended_compressed_buffer_size();
114 unsigned char *comp_buffer = (
unsigned char *)malloc(comp_buffer_size);
115 image_compressor->set_destination_buffer( comp_buffer, comp_buffer_size );
116 image_compressor->compress();
117 FILE *f = fopen(filename,
"wb");
118 if (fwrite(comp_buffer, image_compressor->compressed_size(), 1, f) != 1) {
124 throw fawkes::Exception(
"Supplied ImageCompressor does neither support compressing "
125 " to file nor to a memory buffer. Cannot write.");
138 image_compressor = ic;