this class implements an RLE compressor conforming to the DICOM standard.
More...
|
| DcmRLEEncoder (int doPad) |
| default constructor More...
|
|
| ~DcmRLEEncoder () |
| destructor
|
|
void | add (unsigned char ch) |
| this method adds one byte to the byte stream to be compressed with the RLE compressor. More...
|
|
void | add (const unsigned char *buf, size_t bufcount) |
| this method adds a block of bytes to the byte stream to be compressed with the RLE compressor. More...
|
|
void | flush () |
| this method finalizes the compressed RLE stream, i.e. More...
|
|
size_t | size () const |
| returns the size of compressed RLE stream in bytes. More...
|
|
OFBool | fail () const |
| returns true if the RLE compressor has run out of memory. More...
|
|
void | write (void *target) const |
| copies the compressed RLE byte stream into a target array of at least size() bytes. More...
|
|
void | write (DcmEncoderOutputStream &os) const |
| copies the compressed RLE byte stream into an output stream More...
|
|
|
| DcmRLEEncoder (const DcmRLEEncoder &) |
| private undefined copy constructor
|
|
DcmRLEEncoder & | operator= (const DcmRLEEncoder &) |
| private undefined copy assignment operator
|
|
void | move (size_t numberOfBytes) |
| this method moves the given number of bytes from buff_ to currentBlock_ and "flushes" currentBlock_ to blockList_ if necessary. More...
|
|
|
int | fail_ |
| this flag indicates a failure of the RLE codec. More...
|
|
int | pad_ |
| this flag indicates whether the RLE codec must pad encoded data to an even number of bytes (as required by DICOM). More...
|
|
unsigned char * | currentBlock_ |
| this member points to a block of size DcmRLEEncoder_BLOCKSIZE (unless fail_ is true). More...
|
|
size_t | offset_ |
| contains the number of bytes already written the the memory block pointed to by currentBlock_. More...
|
|
OFList< unsigned char * > | blockList_ |
| this member contains a list of memory blocks of size DcmRLEEncoder_BLOCKSIZE which already have been filled with encoded RLE data. More...
|
|
unsigned char * | RLE_buff_ |
| this member points to a buffer of 132 bytes that is used by the RLE encoding algorithm.
|
|
int | RLE_prev_ |
| value of the last byte fed to the RLE compressor. More...
|
|
int | RLE_pcount_ |
| repeat counter, for RLE compressor may temporarily become negative, guaranteed to be >= 0 between method calls.
|
|
unsigned int | RLE_bindex_ |
| index of next unused byte in RLE_buff_.
|
|
this class implements an RLE compressor conforming to the DICOM standard.
The class is loosely based on an implementation by Phil Norman.
◆ DcmRLEEncoder()
DcmRLEEncoder::DcmRLEEncoder |
( |
int |
doPad | ) |
|
|
inline |
default constructor
- Parameters
-
doPad | if true, RLE codec will pad output data to even number of bytes |
◆ add() [1/2]
void DcmRLEEncoder::add |
( |
const unsigned char * |
buf, |
|
|
size_t |
bufcount |
|
) |
| |
|
inline |
this method adds a block of bytes to the byte stream to be compressed with the RLE compressor.
- Parameters
-
buf | buffer to be added |
bufcount | number of bytes in buffer |
◆ add() [2/2]
void DcmRLEEncoder::add |
( |
unsigned char |
ch | ) |
|
|
inline |
this method adds one byte to the byte stream to be compressed with the RLE compressor.
- Parameters
-
◆ fail()
OFBool DcmRLEEncoder::fail |
( |
| ) |
const |
|
inline |
returns true if the RLE compressor has run out of memory.
In this case, no output has been created.
◆ flush()
void DcmRLEEncoder::flush |
( |
| ) |
|
|
inline |
this method finalizes the compressed RLE stream, i.e.
flushes all pending literal or repeat runs. This method can be called at any time; however, it must be called before size() or write() can be used. Intermediate calls should be avoided since they possibly decrease the compression ratio.
◆ move()
void DcmRLEEncoder::move |
( |
size_t |
numberOfBytes | ) |
|
|
inlineprivate |
this method moves the given number of bytes from buff_ to currentBlock_ and "flushes" currentBlock_ to blockList_ if necessary.
- Parameters
-
numberOfBytes | number of bytes to copy |
◆ size()
size_t DcmRLEEncoder::size |
( |
| ) |
const |
|
inline |
returns the size of compressed RLE stream in bytes.
The size is guaranteed to be an even number of bytes (padded with a trailing zero byte as required by DICOM if necessary). This method may only be called after flush() has been executed to finalize the compressed stream.
- Returns
- size of compressed stream, in bytes
◆ write() [1/2]
◆ write() [2/2]
void DcmRLEEncoder::write |
( |
void * |
target | ) |
const |
|
inline |
copies the compressed RLE byte stream into a target array of at least size() bytes.
- Parameters
-
target | pointer to array of at least size() bytes, must not be NULL. |
◆ blockList_
OFList<unsigned char *> DcmRLEEncoder::blockList_ |
|
private |
this member contains a list of memory blocks of size DcmRLEEncoder_BLOCKSIZE which already have been filled with encoded RLE data.
The current block (pointed to by currentBlock_) is not contained in this list.
◆ currentBlock_
unsigned char* DcmRLEEncoder::currentBlock_ |
|
private |
this member points to a block of size DcmRLEEncoder_BLOCKSIZE (unless fail_ is true).
This is the current block of data to which the RLE stream is written
◆ fail_
this flag indicates a failure of the RLE codec.
Once a failure is flagged, the codec will consume all input and not produce any more output. A failure status can only be caused by an out-of-memory condition.
◆ offset_
size_t DcmRLEEncoder::offset_ |
|
private |
contains the number of bytes already written the the memory block pointed to by currentBlock_.
Value is always less than DcmRLEEncoder_BLOCKSIZE.
◆ pad_
this flag indicates whether the RLE codec must pad encoded data to an even number of bytes (as required by DICOM).
True if padding is required, false otherwise
◆ RLE_prev_
int DcmRLEEncoder::RLE_prev_ |
|
private |
value of the last byte fed to the RLE compressor.
This byte is not yet stored in the RLE_buff_ buffer. Type is int because this allows an "impossible" -1 as default value
The documentation for this class was generated from the following file:
- dcmdata/include/dcmtk/dcmdata/dcrleenc.h