
| Current Path : /usr/include/gdcm-3.0/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //usr/include/gdcm-3.0/gdcmImageChangeTransferSyntax.h |
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html 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.
=========================================================================*/
#ifndef GDCMIMAGECHANGETRANSFERSYNTAX_H
#define GDCMIMAGECHANGETRANSFERSYNTAX_H
#include "gdcmImageToImageFilter.h"
#include "gdcmTransferSyntax.h"
namespace gdcm
{
class DataElement;
class ImageCodec;
/**
* \brief ImageChangeTransferSyntax class
* \details Class to change the transfer syntax of an input DICOM
*
* If only Force param is set but no input TransferSyntax is set, it is assumed
* that user only wants to inspect encapsulated stream (advanced dev. option).
*
* When using UserCodec it is very important that the TransferSyntax (as set in
* SetTransferSyntax) is actually understood by UserCodec (ie.
* UserCodec->CanCode( TransferSyntax ) ). Otherwise the behavior is to use a
* default codec.
*
* \sa JPEGCodec JPEGLSCodec JPEG2000Codec
*/
class GDCM_EXPORT ImageChangeTransferSyntax : public ImageToImageFilter
{
public:
ImageChangeTransferSyntax():TS(TransferSyntax::TS_END),Force(false),CompressIconImage(false),UserCodec(nullptr) {}
~ImageChangeTransferSyntax() = default;
/// Set target Transfer Syntax
void SetTransferSyntax(const TransferSyntax &ts) { TS = ts; }
/// Get Transfer Syntax
const TransferSyntax &GetTransferSyntax() const { return TS; }
/// Change
bool Change();
/// Decide whether or not to also compress the Icon Image using the same
/// Transfer Syntax. Default is to simply decompress icon image
void SetCompressIconImage(bool b) { CompressIconImage = b; }
/// When target Transfer Syntax is identical to input target syntax, no
/// operation is actually done.
/// This is an issue when someone wants to re-compress using GDCM internal
/// implementation a JPEG (for example) image
void SetForce( bool f ) { Force = f; }
/// Allow user to specify exactly which codec to use. this is needed to
/// specify special qualities or compression option.
/// \warning if the codec 'ic' is not compatible with the TransferSyntax
/// requested, it will not be used. It is the user responsibility to check
/// that UserCodec->CanCode( TransferSyntax )
void SetUserCodec(ImageCodec *ic) { UserCodec = ic; }
protected:
bool TryJPEGCodec(const DataElement &pixelde, Bitmap const &input, Bitmap &output);
bool TryJPEG2000Codec(const DataElement &pixelde, Bitmap const &input, Bitmap &output);
bool TryJPEGLSCodec(const DataElement &pixelde, Bitmap const &input, Bitmap &output);
bool TryRAWCodec(const DataElement &pixelde, Bitmap const &input, Bitmap &output);
bool TryRLECodec(const DataElement &pixelde, Bitmap const &input, Bitmap &output);
private:
TransferSyntax TS;
bool Force;
bool CompressIconImage;
ImageCodec *UserCodec;
};
/**
* \example StandardizeFiles.cs
* This is a C++ example on how to use ImageChangeTransferSyntax
*/
} // end namespace gdcm
#endif //GDCMIMAGECHANGETRANSFERSYNTAX_H