forked from DCMTK/dcmtk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdjencext.cc
86 lines (73 loc) · 2.24 KB
/
djencext.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
*
* Copyright (C) 2001-2014, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmjpeg
*
* Author: Marco Eichelberg, Norbert Olges
*
* Purpose: Codec class for encoding JPEG Extended Sequential (lossy, 8/12-bit)
*
*/
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmjpeg/djencext.h"
#include "dcmtk/dcmjpeg/djcparam.h"
#include "dcmtk/dcmjpeg/djrploss.h"
#include "dcmtk/dcmjpeg/djeijg8.h"
#include "dcmtk/dcmjpeg/djeijg12.h"
DJEncoderExtended::DJEncoderExtended()
: DJCodecEncoder()
{
}
DJEncoderExtended::~DJEncoderExtended()
{
}
E_TransferSyntax DJEncoderExtended::supportedTransferSyntax() const
{
return EXS_JPEGProcess2_4;
}
OFBool DJEncoderExtended::isLosslessProcess() const
{
return OFFalse;
}
void DJEncoderExtended::createDerivationDescription(
const DcmRepresentationParameter * toRepParam,
const DJCodecParameter * /* cp */ ,
Uint8 bitsPerSample,
double ratio,
OFString& derivationDescription) const
{
DJ_RPLossy defaultRP;
const DJ_RPLossy *rp = toRepParam ? OFreinterpret_cast(const DJ_RPLossy*, toRepParam) : &defaultRP ;
char buf[64];
derivationDescription = "Lossy compression with JPEG extended sequential ";
if (bitsPerSample > 8) derivationDescription += "12 bit"; else derivationDescription += "8 bit";
derivationDescription += ", IJG quality factor ";
sprintf(buf, "%u", rp->getQuality());
derivationDescription += buf;
derivationDescription += ", compression ratio ";
appendCompressionRatio(derivationDescription, ratio);
}
DJEncoder *DJEncoderExtended::createEncoderInstance(
const DcmRepresentationParameter * toRepParam,
const DJCodecParameter *cp,
Uint8 bitsPerSample) const
{
DJ_RPLossy defaultRP;
const DJ_RPLossy *rp = toRepParam ? OFreinterpret_cast(const DJ_RPLossy*, toRepParam) : &defaultRP ;
DJEncoder *result = NULL;
if (bitsPerSample > 8)
result = new DJCompressIJG12Bit(*cp, EJM_sequential, OFstatic_cast(Uint8, rp->getQuality()));
else
result = new DJCompressIJG8Bit(*cp, EJM_sequential, OFstatic_cast(Uint8, rp->getQuality()));
return result;
}