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.

118 lines
3.0 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkPNGWriter.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 vtkPNGWriter
* @brief Writes PNG files.
*
* vtkPNGWriter writes PNG files. It supports 1 to 4 component data of
* unsigned char or unsigned short
*
* @sa
* vtkPNGReader
*/
#ifndef vtkPNGWriter_h
#define vtkPNGWriter_h
#include "vtkIOImageModule.h" // For export macro
#include "vtkImageWriter.h"
class vtkImageData;
class vtkUnsignedCharArray;
class VTKIOIMAGE_EXPORT vtkPNGWriter : public vtkImageWriter
{
public:
static vtkPNGWriter* New();
vtkTypeMacro(vtkPNGWriter, vtkImageWriter);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* The main interface which triggers the writer to start.
*/
void Write() override;
//@{
/**
* Set/Get the zlib compression level.
* The range is 0-9, with 0 meaning no compression
* corresponding to the largest file size, and 9 meaning
* best compression, corresponding to the smallest file size.
* The default is 5.
*/
vtkSetClampMacro(CompressionLevel, int, 0, 9);
vtkGetMacro(CompressionLevel, int);
//@}
//@{
/**
* Write the image to memory (a vtkUnsignedCharArray)
*/
vtkSetMacro(WriteToMemory, vtkTypeUBool);
vtkGetMacro(WriteToMemory, vtkTypeUBool);
vtkBooleanMacro(WriteToMemory, vtkTypeUBool);
//@}
//@{
/**
* When writing to memory this is the result, it will be nullptr until the
* data is written the first time
*/
virtual void SetResult(vtkUnsignedCharArray*);
vtkGetObjectMacro(Result, vtkUnsignedCharArray);
//@}
/**
* Adds a text chunk to the PNG. More than one text chunk with the same key is permissible.
* There are a number of predefined keywords that should be used
* when appropriate. See
* http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
* for more information.
*/
void AddText(const char* key, const char* value);
//@{
/**
* Standard keys
*/
static const char* TITLE;
static const char* AUTHOR;
static const char* DESCRIPTION;
static const char* COPYRIGHT;
static const char* CREATION_TIME;
static const char* SOFTWARE;
static const char* DISCLAIMER;
static const char* WARNING;
static const char* SOURCE;
static const char* COMMENT;
//@}
protected:
vtkPNGWriter();
~vtkPNGWriter() override;
void WriteSlice(vtkImageData* data, int* uExtent);
int CompressionLevel;
vtkUnsignedCharArray* Result;
FILE* TempFP;
class vtkInternals;
vtkInternals* Internals;
private:
vtkPNGWriter(const vtkPNGWriter&) = delete;
void operator=(const vtkPNGWriter&) = delete;
};
#endif