You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.5 KiB
C++
85 lines
2.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkThreadedImageWriter.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkThreadedImageWriter
|
|
* @brief class used to compress/write images using threads to prevent
|
|
* locking while encoding data.
|
|
*
|
|
* @details This writer allow to encode an image data based on its file
|
|
* extension: tif, tiff, bpm, png, jpg, jpeg, vti, Z, ppm, raw
|
|
*
|
|
* @author Patricia Kroll Fasel @ LANL
|
|
*/
|
|
|
|
#ifndef vtkThreadedImageWriter_h
|
|
#define vtkThreadedImageWriter_h
|
|
|
|
#include "vtkIOAsynchronousModule.h" // For export macro
|
|
#include "vtkObject.h"
|
|
|
|
class vtkImageData;
|
|
|
|
class VTKIOASYNCHRONOUS_EXPORT vtkThreadedImageWriter : public vtkObject
|
|
{
|
|
public:
|
|
static vtkThreadedImageWriter* New();
|
|
vtkTypeMacro(vtkThreadedImageWriter, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Need to be called at least once before using the class.
|
|
* Then it should be called again after any change on the
|
|
* thread count or if Finalize() was called.
|
|
*
|
|
* This method will wait for any running thread to terminate and start
|
|
* a new pool with the given number of threads.
|
|
*/
|
|
void Initialize();
|
|
|
|
/**
|
|
* Push an image into the threaded writer. It is not safe to modify the image
|
|
* after this point.
|
|
* You may run into thread safety issues. Typically, the caller code will
|
|
* simply release reference to the data and stop using it.
|
|
*/
|
|
void EncodeAndWrite(vtkImageData* image, const char* fileName);
|
|
|
|
/**
|
|
* Define the number of worker thread to use.
|
|
* Initialize() need to be called after any thread count change.
|
|
*/
|
|
void SetMaxThreads(vtkTypeUInt32);
|
|
vtkGetMacro(MaxThreads, vtkTypeUInt32);
|
|
|
|
/**
|
|
* This method will wait for any running thread to terminate.
|
|
*/
|
|
void Finalize();
|
|
|
|
protected:
|
|
vtkThreadedImageWriter();
|
|
~vtkThreadedImageWriter() override;
|
|
|
|
private:
|
|
vtkThreadedImageWriter(const vtkThreadedImageWriter&) = delete;
|
|
void operator=(const vtkThreadedImageWriter&) = delete;
|
|
|
|
class vtkInternals;
|
|
vtkInternals* Internals;
|
|
vtkTypeUInt32 MaxThreads;
|
|
};
|
|
|
|
#endif
|