Beruflich Dokumente
Kultur Dokumente
0.0.48
2 License agreement 11
2.1 GNU AFFERO GENERAL PUBLIC LICENSE (Version 3, 19
November 2007) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 Preamble . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.2 TERMS AND CONDITIONS . . . . . . . . . . . . . . . . . 13
2.1.2.1 0. Definitions. . . . . . . . . . . . . . . . . . . . . 13
2.1.2.2 1. Source Code. . . . . . . . . . . . . . . . . . . . 14
2.1.2.3 2. Basic Permissions. . . . . . . . . . . . . . . . . 14
2.1.2.4 3. Protecting Users’ Legal Rights From Anti-
Circumvention Law. . . . . . . . . . . . . . . . . . 15
2.1.2.5 4. Conveying Verbatim Copies. . . . . . . . . . . . 15
2.1.2.6 5. Conveying Modified Source Versions. . . . . . . 15
2.1.2.7 6. Conveying Non-Source Forms. . . . . . . . . . . 16
2.1.2.8 7. Additional Terms. . . . . . . . . . . . . . . . . . 17
2.1.2.9 8. Termination. . . . . . . . . . . . . . . . . . . . 18
2.1.2.10 9. Acceptance Not Required for Having Copies. . . 19
2.1.2.11 10. Automatic Licensing of Downstream Recipients. 19
2.1.2.12 11. Patents. . . . . . . . . . . . . . . . . . . . . . 20
2.1.2.13 12. No Surrender of Others’ Freedom. . . . . . . . 21
2.1.2.14 13. Remote Network Interaction; Use with the GNU
General Public License. . . . . . . . . . . . . . . . 21
2.1.2.15 14. Revised Versions of this License. . . . . . . . . 21
2.1.2.16 15. Disclaimer of Warranty. . . . . . . . . . . . . . 22
2.1.2.17 16. Limitation of Liability. . . . . . . . . . . . . . 22
2.1.2.18 17. Interpretation of Sections 15 and 16. . . . . . . 22
2.2 Imebra Commercial License Version 1 . . . . . . . . . . . . . . . . . 23
4 Quick tour 29
4.1 Adding the Imebra library to your project . . . . . . . . . . . . . . . 30
4.2 Let’s read a dataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 Let’s read or set a tag in the dataSet . . . . . . . . . . . . . . . . . . 31
4.4 Let’s read an image . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.5 How to access the image’s pixels . . . . . . . . . . . . . . . . . . . . 32
8 Namespace Index 47
8.1 Namespace List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9 Class Index 49
9.1 Class Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10 Class Index 53
10.1 Class List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
11 File Index 61
11.1 File List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12 Namespace Documentation 67
12.1 puntoexe Namespace Reference . . . . . . . . . . . . . . . . . . . . 67
12.1.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 70
12.2 puntoexe::imebra Namespace Reference . . . . . . . . . . . . . . . . 71
12.2.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 74
12.3 puntoexe::imebra::codecs Namespace Reference . . . . . . . . . . . . 75
12.3.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 76
12.4 puntoexe::imebra::handlers Namespace Reference . . . . . . . . . . . 77
12.4.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 78
12.4.2 Typedef Documentation . . . . . . . . . . . . . . . . . . . . 78
12.4.2.1 imageHandler . . . . . . . . . . . . . . . . . . . . 78
12.5 puntoexe::imebra::transforms Namespace Reference . . . . . . . . . 79
12.5.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 81
12.6 puntoexe::imebra::transforms::colorTransforms Namespace Reference 82
12.6.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 83
13 Class Documentation 85
13.1 puntoexe::baseObject Class Reference . . . . . . . . . . . . . . . . . 85
13.1.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 86
13.1.2 Constructor & Destructor Documentation . . . . . . . . . . . 87
13.1.2.1 baseObject . . . . . . . . . . . . . . . . . . . . . . 87
13.1.2.2 baseObject . . . . . . . . . . . . . . . . . . . . . . 87
13.1.3 Member Function Documentation . . . . . . . . . . . . . . . 87
13.1.3.1 isReferencedOnce . . . . . . . . . . . . . . . . . . 87
13.2 puntoexe::baseStream Class Reference . . . . . . . . . . . . . . . . . 89
13.2.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 89
13.32.2.21getUnsignedLong . . . . . . . . . . . . . . . . . . 168
13.32.2.22getWaveform . . . . . . . . . . . . . . . . . . . . . 168
13.32.2.23setDouble . . . . . . . . . . . . . . . . . . . . . . 168
13.32.2.24setGroup . . . . . . . . . . . . . . . . . . . . . . . 169
13.32.2.25setImage . . . . . . . . . . . . . . . . . . . . . . . 169
13.32.2.26setItemOffset . . . . . . . . . . . . . . . . . . . . 170
13.32.2.27setSignedLong . . . . . . . . . . . . . . . . . . . . 170
13.32.2.28setString . . . . . . . . . . . . . . . . . . . . . . . 170
13.32.2.29setUnicodeString . . . . . . . . . . . . . . . . . . 171
13.32.2.30setUnsignedLong . . . . . . . . . . . . . . . . . . 172
13.32.2.31updateCharsetTag . . . . . . . . . . . . . . . . . . 172
13.32.2.32updateTagsCharset . . . . . . . . . . . . . . . . . . 172
13.33puntoexe::imebra::dataSetCorruptedOffsetTable Class Reference . . . 173
13.33.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 173
13.33.2 Constructor & Destructor Documentation . . . . . . . . . . . 173
13.33.2.1 dataSetCorruptedOffsetTable . . . . . . . . . . . . 173
13.34puntoexe::imebra::dataSetException Class Reference . . . . . . . . . 174
13.34.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 174
13.35puntoexe::imebra::dataSetExceptionDifferentFormat Class Reference 175
13.35.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 175
13.36puntoexe::imebra::dataSetExceptionOldFormat Class Reference . . . 176
13.36.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 176
13.37puntoexe::imebra::dataSetExceptionUnknownTransferSyntax Class
Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
13.37.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 177
13.38puntoexe::imebra::dataSetExceptionWrongFrame Class Reference . . 178
13.38.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 178
13.39puntoexe::imebra::dataSetImageDoesntExist Class Reference . . . . . 179
13.39.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 179
13.39.2 Constructor & Destructor Documentation . . . . . . . . . . . 179
13.39.2.1 dataSetImageDoesntExist . . . . . . . . . . . . . . 179
13.40puntoexe::imebra::dicomDictionary Class Reference . . . . . . . . . 180
13.40.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 180
13.40.2 Member Function Documentation . . . . . . . . . . . . . . . 181
13.46.2.18getUnsignedLongIncPointer . . . . . . . . . . . . . 203
13.46.2.19incPointer . . . . . . . . . . . . . . . . . . . . . . 203
13.46.2.20pointerIsValid . . . . . . . . . . . . . . . . . . . . 203
13.46.2.21setDate . . . . . . . . . . . . . . . . . . . . . . . . 204
13.46.2.22setDouble . . . . . . . . . . . . . . . . . . . . . . 204
13.46.2.23setDoubleIncPointer . . . . . . . . . . . . . . . . . 204
13.46.2.24setPointer . . . . . . . . . . . . . . . . . . . . . . 205
13.46.2.25setSignedLong . . . . . . . . . . . . . . . . . . . . 205
13.46.2.26setSignedLongIncPointer . . . . . . . . . . . . . . 205
13.46.2.27setSize . . . . . . . . . . . . . . . . . . . . . . . . 206
13.46.2.28setString . . . . . . . . . . . . . . . . . . . . . . . 206
13.46.2.29setUnicodeString . . . . . . . . . . . . . . . . . . 206
13.46.2.30setUnsignedLong . . . . . . . . . . . . . . . . . . 206
13.46.2.31setUnsignedLongIncPointer . . . . . . . . . . . . . 207
13.46.2.32skip . . . . . . . . . . . . . . . . . . . . . . . . . 207
13.47puntoexe::imebra::handlers::dataHandlerDate Class Reference . . . . 208
13.47.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 208
13.47.2 Member Function Documentation . . . . . . . . . . . . . . . 208
13.47.2.1 getUnicodeString . . . . . . . . . . . . . . . . . . 208
13.47.2.2 setUnicodeString . . . . . . . . . . . . . . . . . . 209
13.48puntoexe::imebra::handlers::dataHandlerDateTimeBase Class Reference 210
13.48.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 210
13.49puntoexe::imebra::handlers::dataHandlerNumeric< dataHandlerType
> Class Template Reference . . . . . . . . . . . . . . . . . . . . . . 211
13.49.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 212
13.49.2 Member Function Documentation . . . . . . . . . . . . . . . 212
13.49.2.1 at . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
13.49.2.2 copyFromInt32Interleaved . . . . . . . . . . . . . 212
13.49.2.3 copyToInt32Interleaved . . . . . . . . . . . . . . . 213
13.49.2.4 getMemory . . . . . . . . . . . . . . . . . . . . . 214
13.49.2.5 getMemoryBuffer . . . . . . . . . . . . . . . . . . 214
13.49.2.6 operator[] . . . . . . . . . . . . . . . . . . . . . . 214
13.50puntoexe::imebra::handlers::dataHandlerRaw Class Reference . . . . 216
13.50.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . 216
13.107.3.15
invalidate . . . . . . . . . . . . . . . . . . . . . . . 313
13.107.3.16
isAutoZoom . . . . . . . . . . . . . . . . . . . . . 314
13.107.3.17
millimitersToImagePosX . . . . . . . . . . . . . . 314
13.107.3.18
millimitersToImagePosY . . . . . . . . . . . . . . 314
13.107.3.19
setBackgroundColor . . . . . . . . . . . . . . . . . 315
13.107.3.20
setImage . . . . . . . . . . . . . . . . . . . . . . . 315
13.107.3.21
setScrollPosition . . . . . . . . . . . . . . . . . . . 315
13.107.3.22
setScrollSize . . . . . . . . . . . . . . . . . . . . . 316
13.107.3.23
setZoomFactor . . . . . . . . . . . . . . . . . . . . 316
13.107.3.24
setZoomRect . . . . . . . . . . . . . . . . . . . . . 316
13.107.3.25
updateWindow . . . . . . . . . . . . . . . . . . . . 317
13.107.3.26
windowPosToImageX . . . . . . . . . . . . . . . . 317
13.107.3.27
windowPosToImageY . . . . . . . . . . . . . . . . 317
13.107.3.28
zoomInOut . . . . . . . . . . . . . . . . . . . . . . 318
13.108puntoexe::imebra::waveform Class Reference . . . . . . . . . . . . . 319
13.108.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 319
13.108.2Constructor & Destructor Documentation . . . . . . . . . . . 320
13.108.2.1waveform . . . . . . . . . . . . . . . . . . . . . . 320
13.108.3Member Function Documentation . . . . . . . . . . . . . . . 320
13.108.3.1getBitsAllocated . . . . . . . . . . . . . . . . . . . 320
13.108.3.2getBitsStored . . . . . . . . . . . . . . . . . . . . 320
13.108.3.3getChannels . . . . . . . . . . . . . . . . . . . . . 320
13.108.3.4getIntegerData . . . . . . . . . . . . . . . . . . . . 321
13.108.3.5getInterpretation . . . . . . . . . . . . . . . . . . . 321
13.108.3.6getSamples . . . . . . . . . . . . . . . . . . . . . . 321
13.108.3.7GetWaveformItem . . . . . . . . . . . . . . . . . . 322
13.109puntoexe::lockCriticalSection Class Reference . . . . . . . . . . . . . 323
13.109.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 323
13.109.2Constructor & Destructor Documentation . . . . . . . . . . . 323
13.109.2.1lockCriticalSection . . . . . . . . . . . . . . . . . 323
13.109.2.2∼lockCriticalSection . . . . . . . . . . . . . . . . 323
13.110puntoexe::lockMultipleObjects Class Reference . . . . . . . . . . . . 324
13.110.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 324
13.110.2Member Typedef Documentation . . . . . . . . . . . . . . . 324
13.110.2.1tObjectsList . . . . . . . . . . . . . . . . . . . . . 324
13.110.3Constructor & Destructor Documentation . . . . . . . . . . . 325
13.110.3.1lockMultipleObjects . . . . . . . . . . . . . . . . . 325
13.110.3.2∼lockMultipleObjects . . . . . . . . . . . . . . . . 325
13.110.4Member Function Documentation . . . . . . . . . . . . . . . 325
13.110.4.1unlock . . . . . . . . . . . . . . . . . . . . . . . . 325
13.111puntoexe::lockObject Class Reference . . . . . . . . . . . . . . . . . 326
13.111.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 326
13.111.2Constructor & Destructor Documentation . . . . . . . . . . . 326
13.111.2.1lockObject . . . . . . . . . . . . . . . . . . . . . . 326
13.111.2.2∼lockObject . . . . . . . . . . . . . . . . . . . . . 326
13.111.3Member Function Documentation . . . . . . . . . . . . . . . 326
13.111.3.1unlock . . . . . . . . . . . . . . . . . . . . . . . . 326
13.112puntoexe::memory Class Reference . . . . . . . . . . . . . . . . . . 328
13.112.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 329
13.112.2Member Function Documentation . . . . . . . . . . . . . . . 329
13.112.2.1assign . . . . . . . . . . . . . . . . . . . . . . . . 329
13.112.2.2clear . . . . . . . . . . . . . . . . . . . . . . . . . 329
13.112.2.3copyFrom . . . . . . . . . . . . . . . . . . . . . . 329
13.112.2.4data . . . . . . . . . . . . . . . . . . . . . . . . . 329
13.112.2.5empty . . . . . . . . . . . . . . . . . . . . . . . . 330
13.112.2.6reserve . . . . . . . . . . . . . . . . . . . . . . . . 330
13.112.2.7resize . . . . . . . . . . . . . . . . . . . . . . . . . 330
13.112.2.8size . . . . . . . . . . . . . . . . . . . . . . . . . . 330
13.112.2.9transfer . . . . . . . . . . . . . . . . . . . . . . . . 330
13.113puntoexe::memoryPool Class Reference . . . . . . . . . . . . . . . . 332
13.113.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 332
13.113.2Member Function Documentation . . . . . . . . . . . . . . . 333
13.113.2.1flush . . . . . . . . . . . . . . . . . . . . . . . . . 333
13.113.2.2getMemory . . . . . . . . . . . . . . . . . . . . . 333
13.113.2.3getMemoryPool . . . . . . . . . . . . . . . . . . . 333
13.114puntoexe::memoryStream Class Reference . . . . . . . . . . . . . . . 334
13.114.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 334
13.114.2Constructor & Destructor Documentation . . . . . . . . . . . 334
13.114.2.1memoryStream . . . . . . . . . . . . . . . . . . . 334
13.115puntoexe::nullStream Class Reference . . . . . . . . . . . . . . . . . 335
13.115.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 335
13.116puntoexe::ptr< objectType > Class Template Reference . . . . . . . 336
13.116.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 337
13.116.2Constructor & Destructor Documentation . . . . . . . . . . . 337
13.116.2.1ptr . . . . . . . . . . . . . . . . . . . . . . . . . . 337
13.116.2.2ptr . . . . . . . . . . . . . . . . . . . . . . . . . . 337
13.116.2.3ptr . . . . . . . . . . . . . . . . . . . . . . . . . . 337
13.116.3Member Function Documentation . . . . . . . . . . . . . . . 338
13.116.3.1get . . . . . . . . . . . . . . . . . . . . . . . . . . 338
13.116.3.2operator destType ∗ . . . . . . . . . . . . . . . . . 338
13.116.3.3operator ptr< destType > . . . . . . . . . . . . . . 338
13.116.3.4operator-> . . . . . . . . . . . . . . . . . . . . . . 338
13.116.3.5operator= . . . . . . . . . . . . . . . . . . . . . . . 339
13.116.3.6operator== . . . . . . . . . . . . . . . . . . . . . . 339
13.116.3.7operator== . . . . . . . . . . . . . . . . . . . . . . 339
13.117puntoexe::stream Class Reference . . . . . . . . . . . . . . . . . . . 340
13.117.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 340
13.117.2Member Function Documentation . . . . . . . . . . . . . . . 340
13.117.2.1openFile . . . . . . . . . . . . . . . . . . . . . . . 340
13.118puntoexe::streamController Class Reference . . . . . . . . . . . . . . 342
13.118.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 343
13.118.2Member Enumeration Documentation . . . . . . . . . . . . . 343
13.118.2.1tByteOrdering . . . . . . . . . . . . . . . . . . . . 343
13.118.3Constructor & Destructor Documentation . . . . . . . . . . . 344
13.118.3.1streamController . . . . . . . . . . . . . . . . . . . 344
13.118.4Member Function Documentation . . . . . . . . . . . . . . . 344
13.118.4.1adjustEndian . . . . . . . . . . . . . . . . . . . . . 344
13.118.4.2getControlledStream . . . . . . . . . . . . . . . . . 345
13.118.4.3getControlledStreamPosition . . . . . . . . . . . . 345
13.118.4.4position . . . . . . . . . . . . . . . . . . . . . . . 345
13.118.5Member Data Documentation . . . . . . . . . . . . . . . . . 345
13.118.5.1m_bJpegTags . . . . . . . . . . . . . . . . . . . . 345
13.118.5.2m_dataBuffer . . . . . . . . . . . . . . . . . . . . 346
13.118.5.3m_pControlledStream . . . . . . . . . . . . . . . . 346
13.118.5.4m_virtualLength . . . . . . . . . . . . . . . . . . . 346
13.118.5.5m_virtualStart . . . . . . . . . . . . . . . . . . . . 346
13.119puntoexe::streamException Class Reference . . . . . . . . . . . . . . 347
13.119.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 347
13.120puntoexe::streamExceptionClose Class Reference . . . . . . . . . . . 348
13.120.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 348
13.121puntoexe::streamExceptionEOF Class Reference . . . . . . . . . . . 349
13.121.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 349
13.122puntoexe::streamExceptionOpen Class Reference . . . . . . . . . . . 350
13.122.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 350
13.123puntoexe::streamExceptionRead Class Reference . . . . . . . . . . . 351
13.123.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 351
13.124puntoexe::streamExceptionWrite Class Reference . . . . . . . . . . . 352
13.124.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 352
13.125puntoexe::streamJpegTagInStream Class Reference . . . . . . . . . . 353
13.125.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 353
13.126puntoexe::streamReader Class Reference . . . . . . . . . . . . . . . . 354
13.126.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 355
13.126.2Constructor & Destructor Documentation . . . . . . . . . . . 355
13.126.2.1streamReader . . . . . . . . . . . . . . . . . . . . 355
13.126.3Member Function Documentation . . . . . . . . . . . . . . . 355
13.126.3.1addBit . . . . . . . . . . . . . . . . . . . . . . . . 355
13.126.3.2endReached . . . . . . . . . . . . . . . . . . . . . 356
13.126.3.3read . . . . . . . . . . . . . . . . . . . . . . . . . 356
13.126.3.4readBit . . . . . . . . . . . . . . . . . . . . . . . . 356
13.126.3.5readBits . . . . . . . . . . . . . . . . . . . . . . . 356
13.126.3.6readByte . . . . . . . . . . . . . . . . . . . . . . . 357
13.126.3.7resetInBitsBuffer . . . . . . . . . . . . . . . . . . 357
13.126.3.8seek . . . . . . . . . . . . . . . . . . . . . . . . . 357
13.127puntoexe::streamWriter Class Reference . . . . . . . . . . . . . . . . 359
13.127.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 360
13.127.2Constructor & Destructor Documentation . . . . . . . . . . . 360
13.127.2.1streamWriter . . . . . . . . . . . . . . . . . . . . . 360
13.127.2.2∼streamWriter . . . . . . . . . . . . . . . . . . . . 360
13.127.3Member Function Documentation . . . . . . . . . . . . . . . 360
13.127.3.1flushDataBuffer . . . . . . . . . . . . . . . . . . . 360
13.127.3.2resetOutBitsBuffer . . . . . . . . . . . . . . . . . . 361
13.127.3.3write . . . . . . . . . . . . . . . . . . . . . . . . . 361
13.127.3.4writeBits . . . . . . . . . . . . . . . . . . . . . . . 361
13.127.3.5writeByte . . . . . . . . . . . . . . . . . . . . . . 361
13.128puntoexe::thread Class Reference . . . . . . . . . . . . . . . . . . . . 363
13.128.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 364
13.128.2Constructor & Destructor Documentation . . . . . . . . . . . 364
13.128.2.1thread . . . . . . . . . . . . . . . . . . . . . . . . 364
13.128.3Member Function Documentation . . . . . . . . . . . . . . . 364
13.128.3.1getThreadId . . . . . . . . . . . . . . . . . . . . . 364
13.128.3.2isRunning . . . . . . . . . . . . . . . . . . . . . . 364
13.128.3.3shouldTerminate . . . . . . . . . . . . . . . . . . . 365
13.128.3.4start . . . . . . . . . . . . . . . . . . . . . . . . . 365
13.128.3.5terminate . . . . . . . . . . . . . . . . . . . . . . . 365
13.128.3.6threadFunction . . . . . . . . . . . . . . . . . . . . 365
13.128.3.7yield . . . . . . . . . . . . . . . . . . . . . . . . . 365
13.129puntoexe::threadException Class Reference . . . . . . . . . . . . . . 366
13.129.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 366
13.130puntoexe::threadExceptionAlreadyRunning Class Reference . . . . . 367
13.130.1Detailed Description . . . . . . . . . . . . . . . . . . . . . . 367
1.1 Copyright
Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Paolo Brandoli.
The online version of this document can be found here:
http://imebra.com/documentation/html/index.html
1.2 Introduction
Please read the License agreement (p. 11) first!
Imebra is an open source Dicom library. The library has been designed to handle
Dicom files, but it includes also some classes that manage jpeg and other image files.
At the moment the library provides the following features:
• multi platform
• self contained (the library uses only functions from the standard C library and
the standard template library)
• dicom files parser and builder
• jpeg files parser and builder
• image decompression and compression in the following formats:
– jpeg baseline (8 bits per color channel lossy)
– jpeg baseline extended (12 bits per color channel lossy)
– jpeg lossless (up to 16 bits per color channel lossless)
– raw dicom (up to 16 bits per color channel lossless)
2 Imebra open source Dicom library
Other features have been planned but have not been included in this release. The missed
features are the following:
• support for dicom objects (like patient, procedure, image, and so on)
• network support for communication between Dicom devices
• Fixes #44 (Add the "const" modifier to all the relevant functions in the data
handlers)
• Fixes #55 (Add const qualifier to functions that require them)
• Fixes #56 (The external lock in baseObject may create circular references)
• Fixes #57 (RGBToPALETTECOLOR causes memory leaks)
• Fixes #58 (The destructors of objects derived from baseObject must be protected,
since they can be deleted only by themself)
• The file reading related function now return the read byte or bits by value
• Fixes #42 (When a dicomdir destructor is called, the it delete all the children
elements. This may cause a stack overflow when an element call release on the
next sibling item and the number of siblings is high)
• Fixes #46 (Checking for LUT validity will help dicom2jpeg to ignore the LUT
if it contains invalid data)
• Fixes #49 (The codepage "CHAR" used to indicate the locale charset in charset-
Conversion.cpp (p. 376) causes an exception during the initialization of ICONV.
The usage of "" instead of "char" works properly)
• Fixes #50 (mbxInt32 and imbxUint32 are wrongly mapped to long and unsigned
long. It should be mapped to int and unsigned int)
• Fixes #52 (The charset conversion uses different error reporting in ICONV and
Windows API)
• Fixes #32 (When launched without parameters, dicom2jpeg should display the
version)
• Fixes #34 (The on-line documentation should have to Google Analytics tracking
code)
• Fixes #37 (Change the title of the documentation to: Imebra - Open source dicom
library)
• Fixes #4 (A sequence tag should have the type set to SQ, but the writer uses the
first buffer’s type, therefore the data type is incorrect)
• Fixes #5 (When writing sequences, the tag’s length is not calculated correctly)
• Corrected documentation
• The jpegCodec returns an image with color space "YBR_FULL" when the image
is compressed in lossy mode and the dataset specifies the color space "RGB"
• Closes #12 (Subsampled images are saved/loaded incorrectly by the jpeg codec)
• Closes #13 (When saving a jpeg image from a dataset and it doesn’t need to be
converted an exception is thrown)
• Closes #14 (When saving an image the subsampling flags don’t match the qual-
ity)
• Now non encapsulated images are saved one after another even when their length
is odd: no padding bytes are inserted
• closes #11 (The 32 bits tag’s length is truncated (only the lower 16 bits are cor-
rect) )
• The images build during the test units had a reduced range. Corrected
• Now the jpeg codec creates the offset table when loading an image
• The dataSet doesn’t need to retrieve the images handlers anymore when updating
the offsets table
• The dicom codec doesn’t need to retrieve the handlers anymore when calculating
the tag size
• Closes #2 (The code assumes that wchar_t is 2 bytes long, while some systems
have wchar_t=4 bytes long)
• Closes #3 (Usage of ICONV should check for return value E2BIG)
• Added casting operators () to puntoexe::ptr (p. 336)
• The smart pointer puntoexe::ptr (p. 336) is able to cast the object’s type. See
New smart pointer’s behaviour (p. 9) for more information.
• The reference counter in puntoexe::baseObject (p. 85) now is set to 0 at con-
struction time and should be increased by the application. It doesn’t affect your
code if you used the smart pointer puntoexe::ptr (p. 336). See New smart
pointer’s behaviour (p. 9) for more information.
• Now the library doesn’t fail when the dataset has an empty images’ offset table
• Now the Dicom codec doesn’t switch to implicit datatype when a tag without
datatype is found in the group 0x0002.
The tag without datatype is still recognized. This solves a problem with dicom
files generated by DicomWorks
• Modified several files to solve problems with Borland C++ Builder 2006
• The dicom codec now uses a dataHandlerRaw to read the tags from the file (pre-
viously it was using a normal dataHandler)
License agreement
12 License agreement
Since Puntoexe owns the copyright to the Imebra’s source code, it is able to employ
Dual Licensing, which means that the same product is available under GPL and under
a commercial license. This does not in any way affect the Open Source commitment
of Puntoexe.
Imebra is available for free under the GNU AFFERO GENERAL PUBLIC LI-
CENSE (Version 3, 19 November 2007) (p. 12).
If you do not want to be bound by the GPL terms (such as the requirement that your
application must also be GPL), you may purchase a commercial license (see Ime-
bra Commercial License Version 1 (p. 23)) for Imebra from the puntoexe’s website
(http://www.puntoexe.com).
2.1.1 Preamble
The GNU Affero General Public License is a free, copyleft license for software and
other kinds of works, specifically designed to ensure cooperation with the community
in the case of network server software.
The licenses for most software and other practical works are designed to take away your
freedom to share and change the works. By contrast, our General Public Licenses are
intended to guarantee your freedom to share and change all versions of a program–to
make sure it remains free software for all its users.
When we speak of free software, we are referring to freedom, not price. Our General
Public Licenses are designed to make sure that you have the freedom to distribute
copies of free software (and charge for them if you wish), that you receive source code
or can get it if you want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights with two steps: (1)
assert copyright on the software, and (2) offer you this License which gives you legal
permission to copy, distribute and/or modify the software.
A secondary benefit of defending all users’ freedom is that improvements made in
alternate versions of the program, if they receive widespread use, become available for
other developers to incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of software used on
network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and letting the
public access it on a server without ever releasing its source code to the public.
The GNU Affero General Public License is designed specifically to ensure that, in such
cases, the modified source code becomes available to the community. It requires the
operator of a network server to provide the source code of the modified version running
there to the users of that server. Therefore, public use of a modified version, on a
publicly accessible server, gives the public access to the source code of the modified
version.
An older license, called the Affero General Public License and published by Affero,
was designed to accomplish similar goals. This is a different license, not a version
of the Affero GPL, but Affero has released a new version of the Affero GPL which
permits relicensing under this license.
The precise terms and conditions for copying, distribution and modification follow.
2.1.2.1 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of works, such as
semiconductor masks.
"The Program" refers to any copyrightable work licensed under this License. Each
licensee is addressed as "you". "Licensees" and "recipients" may be individuals or
organizations.
To "modify" a work means to copy from or adapt all or part of the work in a fashion
requiring copyright permission, other than the making of an exact copy. The resulting
work is called a "modified version" of the earlier work or a work "based on" the earlier
work.
A "covered work" means either the unmodified Program or a work based on the Pro-
gram.
To "propagate" a work means to do anything with it that, without permission, would
make you directly or secondarily liable for infringement under applicable copyright
law, except executing it on a computer or modifying a private copy. Propagation in-
cludes copying, distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other parties to make
or receive copies. Mere interaction with a user through a computer network, with no
transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to the extent that it
includes a convenient and prominently visible feature that (1) displays an appropriate
copyright notice, and (2) tells the user that there is no warranty for the work (except to
the extent that warranties are provided), that licensees may convey the work under this
License, and how to view a copy of this License. If the interface presents a list of user
commands or options, such as a menu, a prominent item in the list meets this criterion.
The "source code" for a work means the preferred form of the work for making modi-
fications to it. "Object code" means any non-source form of a work.
A "Standard Interface" means an interface that either is an official standard defined
by a recognized standards body, or, in the case of interfaces specified for a particular
programming language, one that is widely used among developers working in that
language.
The "System Libraries" of an executable work include anything, other than the work
as a whole, that (a) is included in the normal form of packaging a Major Component,
but which is not part of that Major Component, and (b) serves only to enable use of the
work with that Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A "Major Component",
in this context, means a major essential component (kernel, window system, and so
on) of the specific operating system (if any) on which the executable work runs, or a
compiler used to produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all the source code
needed to generate, install, and (for an executable work) run the object code and to
modify the work, including scripts to control those activities. However, it does not
include the work’s System Libraries, or general-purpose tools or generally available
free programs which are used unmodified in performing those activities but which are
not part of the work. For example, Corresponding Source includes interface definition
files associated with source files for the work, and the source code for shared libraries
and dynamically linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those subprograms
and other parts of the work.
The Corresponding Source need not include anything that users can regenerate auto-
matically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
All rights granted under this License are granted for the term of copyright on the Pro-
gram, and are irrevocable provided the stated conditions are met. This License explic-
itly affirms your unlimited permission to run the unmodified Program. The output from
running a covered work is covered by this License only if the output, given its content,
constitutes a covered work. This License acknowledges your rights of fair use or other
equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without con-
ditions so long as your license otherwise remains in force. You may convey covered
works to others for the sole purpose of having them make modifications exclusively for
you, or provide you with facilities for running those works, provided that you comply
with the terms of this License in conveying all material for which you do not control
copyright. Those thus making or running the covered works for you must do so ex-
clusively on your behalf, under your direction and control, on terms that prohibit them
from making any copies of your copyrighted material outside their relationship with
you.
Conveying under any other circumstances is permitted solely under the conditions
stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
You may convey verbatim copies of the Program’s source code as you receive it, in any
medium, provided that you conspicuously and appropriately publish on each copy an
appropriate copyright notice; keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code; keep intact all
notices of the absence of any warranty; and give all recipients a copy of this License
along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer
support or warranty protection for a fee.
You may convey a work based on the Program, or the modifications to produce it from
the Program, in the form of source code under the terms of section 4, provided that you
also meet all of these conditions:
• a) The work must carry prominent notices stating that you modified it, and giving
a relevant date.
• b) The work must carry prominent notices stating that it is released under this
License and any conditions added under section 7. This requirement modifies
the requirement in section 4 to "keep intact all notices".
• c) You must license the entire work, as a whole, under this License to anyone
who comes into possession of a copy. This License will therefore apply, along
with any applicable section 7 additional terms, to the whole of the work, and all
its parts, regardless of how they are packaged. This License gives no permission
to license the work in any other way, but it does not invalidate such permission
if you have separately received it.
• d) If the work has interactive user interfaces, each must display Appropriate
Legal Notices; however, if the Program has interactive interfaces that do not
display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are
not by their nature extensions of the covered work, and which are not combined with it
such as to form a larger program, in or on a volume of a storage or distribution medium,
is called an "aggregate" if the compilation and its resulting copyright are not used to
limit the access or legal rights of the compilation’s users beyond what the individual
works permit. Inclusion of a covered work in an aggregate does not cause this License
to apply to the other parts of the aggregate.
You may convey a covered work in object code form under the terms of sections 4 and
5, provided that you also convey the machine-readable Corresponding Source under
the terms of this License, in one of these ways:
• a) Convey the object code in, or embodied in, a physical product (including a
physical distribution medium), accompanied by the Corresponding Source fixed
on a durable physical medium customarily used for software interchange.
• b) Convey the object code in, or embodied in, a physical product (including a
physical distribution medium), accompanied by a written offer, valid for at least
three years and valid for as long as you offer spare parts or customer support
for that product model, to give anyone who possesses the object code either
(1) a copy of the Corresponding Source for all the software in the product that
is covered by this License, on a durable physical medium customarily used for
software interchange, for a price no more than your reasonable cost of physically
performing this conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
• c) Convey individual copies of the object code with a copy of the written offer to
provide the Corresponding Source. This alternative is allowed only occasionally
and noncommercially, and only if you received the object code with such an
offer, in accord with subsection 6b.
• d) Convey the object code by offering access from a designated place (gratis or
for a charge), and offer equivalent access to the Corresponding Source in the
same way through the same place at no further charge. You need not require
recipients to copy the Corresponding Source along with the object code. If the
place to copy the object code is a network server, the Corresponding Source may
be on a different server (operated by you or a third party) that supports equivalent
copying facilities, provided you maintain clear directions next to the object code
saying where to find the Corresponding Source. Regardless of what server hosts
the Corresponding Source, you remain obligated to ensure that it is available for
as long as needed to satisfy these requirements.
• e) Convey the object code using peer-to-peer transmission, provided you inform
other peers where the object code and Corresponding Source of the work are
being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Cor-
responding Source as a System Library, need not be included in conveying the object
code work.
A "User Product" is either (1) a "consumer product", which means any tangible per-
sonal property which is normally used for personal, family, or household purposes, or
(2) anything designed or sold for incorporation into a dwelling. In determining whether
a product is a consumer product, doubtful cases shall be resolved in favor of coverage.
For a particular product received by a particular user, "normally used" refers to a typical
or common use of that class of product, regardless of the status of the particular user or
of the way in which the particular user actually uses, or expects or is expected to use,
the product. A product is a consumer product regardless of whether the product has
substantial commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods, procedures, autho-
rization keys, or other information required to install and execute modified versions
of a covered work in that User Product from a modified version of its Corresponding
Source. The information must suffice to ensure that the continued functioning of the
modified object code is in no case prevented or interfered with solely because modifi-
cation has been made.
If you convey an object code work under this section in, or with, or specifically for use
in, a User Product, and the conveying occurs as part of a transaction in which the right
of possession and use of the User Product is transferred to the recipient in perpetuity or
for a fixed term (regardless of how the transaction is characterized), the Corresponding
Source conveyed under this section must be accompanied by the Installation Informa-
tion. But this requirement does not apply if neither you nor any third party retains the
ability to install modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a requirement
to continue to provide support service, warranty, or updates for a work that has been
modified or installed by the recipient, or for the User Product in which it has been
modified or installed. Access to a network may be denied when the modification itself
materially and adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with
this section must be in a format that is publicly documented (and with an implementa-
tion available to the public in source code form), and must require no special password
or key for unpacking, reading or copying.
"Additional permissions" are terms that supplement the terms of this License by mak-
ing exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall be treated as
though they were included in this License, to the extent that they are valid under appli-
cable law. If additional permissions apply only to part of the Program, that part may be
used separately under those permissions, but the entire Program remains governed by
All other non-permissive additional terms are considered "further restrictions" within
the meaning of section 10. If the Program as you received it, or any part of it, contains
a notice stating that it is governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains a further restric-
tion but permits relicensing or conveying under this License, you may add to a covered
work material governed by the terms of that license document, provided that the further
restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the
relevant source files, a statement of the additional terms that apply to those files, or a
notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a sep-
arately written license, or stated as exceptions; the above requirements apply either
way.
2.1.2.9 8. Termination.
You may not propagate or modify a covered work except as expressly provided un-
der this License. Any attempt otherwise to propagate or modify it is void, and will
automatically terminate your rights under this License (including any patent licenses
granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular
copyright holder is reinstated (a) provisionally, unless and until the copyright holder
explicitly and finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means prior to 60 days
after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if
the copyright holder notifies you of the violation by some reasonable means, this is the
first time you have received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after your receipt of the
notice.
Termination of your rights under this section does not terminate the licenses of parties
who have received copies or rights from you under this License. If your rights have
been terminated and not permanently reinstated, you do not qualify to receive new
licenses for the same material under section 10.
You are not required to accept this License in order to receive or run a copy of the Pro-
gram. Ancillary propagation of a covered work occurring solely as a consequence of
using peer-to-peer transmission to receive a copy likewise does not require acceptance.
However, nothing other than this License grants you permission to propagate or modify
any covered work. These actions infringe copyright if you do not accept this License.
Therefore, by modifying or propagating a covered work, you indicate your acceptance
of this License to do so.
Each time you convey a covered work, the recipient automatically receives a license
from the original licensors, to run, modify and propagate that work, subject to this
License. You are not responsible for enforcing compliance by third parties with this
License.
An "entity transaction" is a transaction transferring control of an organization, or sub-
stantially all assets of one, or subdividing an organization, or merging organizations.
If propagation of a covered work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever licenses to the work
the party’s predecessor in interest had or could give under the previous paragraph, plus
a right to possession of the Corresponding Source of the work from the predecessor in
interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or
affirmed under this License. For example, you may not impose a license fee, royalty,
or other charge for exercise of rights granted under this License, and you may not
initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for sale, or importing
the Program or any portion of it.
A "contributor" is a copyright holder who authorizes use under this License of the
Program or a work on which the Program is based. The work thus licensed is called
the contributor’s "contributor version".
A contributor’s "essential patent claims" are all patent claims owned or controlled by
the contributor, whether already acquired or hereafter acquired, that would be infringed
by some manner, permitted by this License, of making, using, or selling its contributor
version, but do not include claims that would be infringed only as a consequence of fur-
ther modification of the contributor version. For purposes of this definition, "control"
includes the right to grant patent sublicenses in a manner consistent with the require-
ments of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license
under the contributor’s essential patent claims, to make, use, sell, offer for sale, import
and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express agreement or com-
mitment, however denominated, not to enforce a patent (such as an express permission
to practice a patent or covenant not to sue for patent infringement). To "grant" such
a patent license to a party means to make such an agreement or commitment not to
enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corre-
sponding Source of the work is not available for anyone to copy, free of charge and
under the terms of this License, through a publicly available network server or other
readily accessible means, then you must either (1) cause the Corresponding Source to
be so available, or (2) arrange to deprive yourself of the benefit of the patent license for
this particular work, or (3) arrange, in a manner consistent with the requirements of this
License, to extend the patent license to downstream recipients. "Knowingly relying"
means you have actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient’s use of the covered work in a country,
would infringe one or more identifiable patents in that country that you have reason to
believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey,
or propagate by procuring conveyance of, a covered work, and grant a patent license
to some of the parties receiving the covered work authorizing them to use, propagate,
modify or convey a specific copy of the covered work, then the patent license you grant
is automatically extended to all recipients of the covered work and works based on it.
A patent license is "discriminatory" if it does not include within the scope of its cover-
age, prohibits the exercise of, or is conditioned on the non-exercise of one or more of
the rights that are specifically granted under this License. You may not convey a cov-
ered work if you are a party to an arrangement with a third party that is in the business
of distributing software, under which you make payment to the third party based on the
extent of your activity of conveying the work, and under which the third party grants,
to any of the parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work conveyed by you (or
copies made from those copies), or (b) primarily for and in connection with specific
products or compilations that contain the covered work, unless you entered into that
arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license
or other defenses to infringement that may otherwise be available to you under appli-
cable patent law.
If conditions are imposed on you (whether by court order, agreement or otherwise) that
contradict the conditions of this License, they do not excuse you from the conditions
of this License. If you cannot convey a covered work so as to satisfy simultaneously
your obligations under this License and any other pertinent obligations, then as a con-
sequence you may not convey it at all. For example, if you agree to terms that obligate
you to collect a royalty for further conveying from those to whom you convey the Pro-
gram, the only way you could satisfy both those terms and this License would be to
refrain entirely from conveying the Program.
2.1.2.14 13. Remote Network Interaction; Use with the GNU General Public
License.
Notwithstanding any other provision of this License, if you modify the Program, your
modified version must prominently offer all users interacting with it remotely through a
computer network (if your version supports such interaction) an opportunity to receive
the Corresponding Source of your version by providing access to the Corresponding
Source from a network server at no charge, through some standard or customary means
of facilitating copying of software. This Corresponding Source shall include the Corre-
sponding Source for any work covered by version 3 of the GNU General Public License
that is incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have permission to link or
combine any covered work with a work licensed under version 3 of the GNU General
Public License into a single combined work, and to convey the resulting work. The
terms of this License will continue to apply to the part which is the covered work, but
the work with which it is combined will remain governed by version 3 of the GNU
General Public License.
The Free Software Foundation may publish revised and/or new versions of the GNU
Affero General Public License from time to time. Such new versions will be similar
in spirit to the present version, but may differ in detail to address new problems or
concerns.
Each version is given a distinguishing version number. If the Program specifies that
a certain numbered version of the GNU Affero General Public License "or any later
version" applies to it, you have the option of following the terms and conditions ei-
ther of that numbered version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the GNU Affero Gen-
eral Public License, you may choose any version ever published by the Free Software
Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU
Affero General Public License can be used, that proxy’s public statement of acceptance
of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no
additional obligations are imposed on any author or copyright holder as a result of your
choosing to follow a later version.
If the disclaimer of warranty and limitation of liability provided above cannot be given
local legal effect according to their terms, reviewing courts shall apply local law that
most closely approximates an absolute waiver of all civil liability in connection with
the Program, unless a warranty or assumption of liability accompanies a copy of the
Program in return for a fee.
The Imebra Commercial License will be referred to as "The license" in the remainder
of this text. The Imebra Library will be referred to as "Imebra". The software based on
Imebra and developed by the license holder will be referred to as "The product".
License grant
3. The product based on Imebra must add significant and primary functionality to
the functionalities provided by Imebra.
4. The license holder is allowed to make modifications to the Imebra source code
but in no event will the original copyright holders of this library be held respon-
sible for action or actions resulting from any modifications of the source.
5. The license holder is not required to publicize or otherwise make available any
software used in conjunction with Imebra.
6. In no event shall the copyright notice in any of the source files supplied in Imebra
be removed or modified.
Redistributables
The Imebra’s source code doesn’t need to be redistributed with your application.
Termination
This license is effective until terminated. You may terminate it at any point by destroy-
ing the Imebra source code together with all copies Imebra. Also, Puntoexe has the
option to terminate if you fail to comply with any term or conditions of this Agree-
ment. You agree upon such termination to destroy Imebra together with all copies of
the Imebra.
Rental
Copyright
The software is protected by copyright law and international treaty provisions. You
acknowledge that no title to the intellectual property in the Imebra is transferred to
you. You further acknowledge that title and full ownership rights to the Imebra will
remain the exclusive property of Puntoexe or its suppliers, and you will not acquire
any rights to the Imebra library except as expressly set forth in this license. You agree
that any copies of Imebra will contain the same proprietary notices which appear on
and in the Imebra distribution.
Limitations of Liability
In no event shall the initial developers or copyright holders be liable for any damages
whatsoever, including - but not restricted to - lost revenue or profits or other direct,
indirect, special, incidental or consequential damages, even if they have been advised
of the possibility of such damages, except to the extent invariable law, if any, provides
otherwise.
FAIL-SAFE PERFORMANCE
Severability
In the event of invalidity of any provision of this license, the parties agree that such
invalidity shall not affect the validity of the remaining portions of this license.
Governing law
This license will be governed by the laws of Italy and is subject to the exclusive juris-
diction of the Italy courts.
Entire agreement
This is the entire agreement between you and Puntoexe which supersedes any prior
agreement or understanding, whether written or oral, relating to the subject matter of
this license.
3.1 Introduction
Imebra has been designed to work with Dicom structures, but because images have a
great importance in the Dicom world, it also includes some image compression and
decompression functions.
At the moment, 2 codecs are distributed with imebra:
• a Dicom codec
• a Jpeg codec
When a codec reads a stream, it generates a Dicom structure (from now "dataSet", see
puntoexe::imebra::dataSet (p. 155)) in memory and fill it with all the informations
available in the stream; please note that also the jpeg codec generates a Dicom structure.
If some images are embedded in the stream being parsed, then they are embedded
into the puntoexe::imebra::dataSet (p. 155), but they are not decompressed nor in-
terpreted; in order to retrieve an image from the dataSet, the application must call
the function puntoexe::imebra::dataSet::getImage() (p. 163) that retrieves the image
from the dataSet and decompresses it using the appropriate codec.
Other functions in the dataSet allow the application to read or write into the Dicom
tags, or to store new images into the dataSet (puntoexe::imebra::dataSet (p. 155)).
only once. The information about the order is not stored in the Dicom stream but is
generated by the library while a Dicom structure is created.
The tags that belong to the same group are stored together in a Dicom stream.
Quick tour
30 Quick tour
You should read Adding Imebra to your project (p. 35) to learn how to include Imebra
to your project.
A quick explanation:
• Add all the files in the directories library/base and library/imebra to your project
• Disable the use of the precompiled header for all the Imebra source files (.cpp)
• Include the file "library/imebra/include/imebra.h" in all the files that use the Ime-
bra classes, or include it in the precompiled headers
• If you are compiling the application on Windows, then define the preprocessor
symbol WIN32
A dataSet can be created by reading a Dicom stream or a Jpeg stream; Imebra can
detect automatically the stream format.
The first operation to perform is creating a stream; this can be a file or a memory buffer.
In this example we use a file stream. The following code creates a file stream and open
the file "d:\test.dcm" in read mode:
With the previous code the application used a smart pointer (see puntoexe::ptr
(p. 336)) that tracks the usage of a stream object; when the smart pointer (the variable
readStream) goes out of scope then the reference counter of the stream is decreased.
Eventually the stream is deleted when the reference counter reaches 0.
With the following code we parse the content of the file managed by the stream and we
create a dataSet structure that contains the dicom tags defined in the file. We create a
streamReader object, which accesses the stream and gets data from it. Several stream-
Reader objects can share a single baseStream, even in multithread environments.
ptr<imebra::transforms::transform> modVOILUT(
new imebra::transforms::modalityVOILUT);
modVOILUT->declareInputImage(0, firstImage);
modVOILUT->declareDataSet(testDataSet);
modVOILUT->doTransform();
ptr<imebra::image> convertedImage = modVOILUT->getOutputImage(0);
Further processing may be required to convert the convertedImage into an image suit-
able for the presentation on the screen. The VOILUT transform applies the contrast
suggested by the dataSet to the image. For instance:
ptr<imebra::transforms::transform> myVoiLut(
new imebra::transforms::VOILUT);
myVoiLut->declareInputImage(0, convertedImage);
myVoiLut->declareDataSet(testDataSet);
myVoiLut->doTransform();
ptr<imebra::image> presentationImage = myVoiLut->getOutputImage(0);
And do you need the image in an RGB format? Here you go:
5.1 Introduction
Imebra is not distributed as a dynamic module and probably will never be. This is due
to the CPP language used to build the library and to the different conventions used by
different compilers when they deal with the C++ function names.
Because of this, all the Imebra source files must be linked to your project by you. If
you use the same C++ compiler to build your application and the Imebra library then
you could create a dynamic module that includes the Imebra library.
The following sections describes how to include the Imebra source code in your project
and how to call its functions.
• iconv.h
• pthread.h
• sched.h
The application must be linked to the iconv and the pthread libraries.
• library/imebra/src
• library/base/src
The files in those directories are cpp source files. You must disable the use of the
precompiled header for all the imebra source files.
The files in the following directories are header files and don’t need to be included
in your project, but nothing harmful happen if you do include them (please note that
EVC4 needs them):
• library/imebra/include
• library/base/include
• A modern STL library is available and the path to its header files has been added
to the paths searched by the "include" statement
• Iconv and Pthread are available on Posix systems (non necessary on Windows
systems)
• All the cpp files in the directory "library/base/src" have been added to your
project
• All the cpp files in the directory "library/imebra/src" have been added to your
project
• When compiling for Windows Mobile define the symbol _WIN32_WCE in the
preprocessor definitions
• Include the file "library/imebra/imebra.h" in all the files that reference an imebra
class
Why does Imebra use a custom implementation of the smart pointer when there are
already some out there? Because the pointer is used also to track object that should be
removed but in practice are not; for instance, the puntoexe::memory (p. 328) classes
sometime are not deleted when they counter reaches 0, but they are stored in pun-
toexe::memoryPool (p. 332) and reused later. Each Imebra object can veto its deletion
by returning false when a call to puntoexe::baseObject::preDelete() is made.
So, your application should use puntoexe::ptr (p. 336) instead of increasing/decreas-
ing the reference counters "manually" by calling puntoexe::baseObject::addRef() and
puntoexe::baseObject::release().
Or you could use the C++ statement "using" in order to declare the namespace that
your application is going to use.
6.1 Introduction
The Dicom standard supports several charsets, including the unicode (UTF8 encoded).
Imebra uses the following approach when dealing with tags that could have been en-
coded using one of the Dicom charsets:
• when an application writes a value in a tag, it can change the tag’s charsets:
before a dataset is saved all the tag’s charsets are analyzed and checked for in-
consistence or invalid charsets combinations and the tag 0008,0005 is updated
with the dataset’s charsets.
The conversion from/to the dataSet defined charsets happens when a dataHandler is
created or destroyed: while the dataHandler is "alive", the strings are kept in unicode
format and converted to ansi if a non-unicode function is called.
The conversion uses MultiByteToWideChars/WideCharsToMultiByte on Windows and
iconv on Posix systems.
7.1 Introduction
In order to keep the dataSet in a consistent state while several threads read and write
into it, the following features have been introduced in Imebra:
• committing transactions
• non-committing transactions
A committing transaction tries to commits all the changes made to the tags when the
transaction is closed, while a non-committing transaction delegates the commit to the
parent transaction; this means that only a nested transaction can be a non-committing
transaction and Imebra will always create a committing transaction for non nested ones.
In order to include one or more write operations in a transaction the application
has to enclose them in a transaction block. A transaction block is initiated by the
macro IMEBRA_TRANSACTION_START() (p. 506) or IMEBRA_COMMIT_-
TRANSACTION_START() (p. 505) and is terminated by the macro IMEBRA_-
TRANSACTION_END() (p. 505).
For instance, the following code tries to write a value in the tags 0010,0010 (patient’s
name) and 0010,1010 (patient’s age). If an error occurs inside the transaction block
then both the tags will retain their initial value.
IMEBRA_TRANSACTION_START();
// If an error occurs here then the two tags will retain their
// initial state
myDataSet->setUnicodeString(0x0010, 0, 0x0010, 0, L"Surname^name");
myDataSet->setUnsignedLong(0x0010, 0, 0x1010, 0, 20); // twenty years old
// The values have not been written yet, only when the transaction
// commits them they will be transferred into the dataset
IMEBRA_TRANSACTION_END();
Namespace Index
Class Index
puntoexe::imebra::handlers::dataHandlerString . . . . . . . . . . . . 217
puntoexe::imebra::handlers::dataHandlerDateTimeBase . . . . . . 210
puntoexe::imebra::handlers::dataHandlerDate . . . . . . . . . 208
puntoexe::imebra::handlers::dataHandlerTime . . . . . . . . . 230
puntoexe::imebra::handlers::dataHandlerStringAE . . . . . . . . . 218
puntoexe::imebra::handlers::dataHandlerStringAS . . . . . . . . . 219
puntoexe::imebra::handlers::dataHandlerStringCS . . . . . . . . . 224
puntoexe::imebra::handlers::dataHandlerStringDS . . . . . . . . . 225
puntoexe::imebra::handlers::dataHandlerStringIS . . . . . . . . . 226
puntoexe::imebra::handlers::dataHandlerStringUnicode . . . . . . 229
puntoexe::imebra::handlers::dataHandlerStringPN . . . . . . . 227
puntoexe::imebra::image . . . . . . . . . . . . . . . . . . . . . . . . . . 232
puntoexe::imebra::lut . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactory . 253
puntoexe::imebra::transforms::transform . . . . . . . . . . . . . . . . . . 285
puntoexe::imebra::transforms::colorTransforms::colorTransform . . . 251
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2261
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToMONOCHROME1263
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB262
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB264
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFULL265
puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB266
puntoexe::imebra::transforms::colorTransforms::RGBToPALETTECOLOR269
puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2268
puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL 270
puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL271
puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2272
puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB 273
puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB274
puntoexe::imebra::transforms::drawBitmap . . . . . . . . . . . . . . 275
puntoexe::imebra::transforms::transformBuffers . . . . . . . . . . . . 289
puntoexe::imebra::transforms::transformBuffersInPlace . . . . . . 291
puntoexe::imebra::transforms::modalityVOILUT . . . . . . . 283
puntoexe::imebra::transforms::modalityVOILUTInverse . . 284
puntoexe::imebra::transforms::transformHighBit . . . . . . . . 297
puntoexe::imebra::transforms::VOILUT . . . . . . . . . . . . 300
puntoexe::imebra::transforms::VOILUTInverse . . . . . . 304
puntoexe::imebra::transforms::transformBuffersInputOutput . . . 292
puntoexe::imebra::transforms::transformsChain . . . . . . . . . . . . 298
puntoexe::imebra::waveform . . . . . . . . . . . . . . . . . . . . . . . . 319
puntoexe::memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
puntoexe::streamController . . . . . . . . . . . . . . . . . . . . . . . . . 342
puntoexe::streamReader . . . . . . . . . . . . . . . . . . . . . . . . . 354
puntoexe::streamWriter . . . . . . . . . . . . . . . . . . . . . . . . . 359
puntoexe::thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
puntoexe::charsetConversionException . . . . . . . . . . . . . . . . . . . . . 91
puntoexe::charsetConversionExceptionNoSupportedTable . . . . . . . . . 92
puntoexe::charsetConversionExceptionNoTable . . . . . . . . . . . . . . 93
puntoexe::charsetConversionExceptionUtfSizeNotSupported . . . . . . . 94
puntoexe::criticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
puntoexe::exceptionInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
puntoexe::imebra::bufferException . . . . . . . . . . . . . . . . . . . . . . . 113
puntoexe::imebra::bufferExceptionUnknownType . . . . . . . . . . . . . 114
puntoexe::imebra::charsetsList::charsetsListException . . . . . . . . . . . . . 116
puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault . . . . . 115
puntoexe::imebra::codecs::codecException . . . . . . . . . . . . . . . . . . . 124
puntoexe::imebra::codecs::codecExceptionCorruptedFile . . . . . . . . . 125
puntoexe::imebra::codecs::codecExceptionWrongFormat . . . . . . . . . 126
puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax . . . . . 127
puntoexe::imebra::codecs::dicomCodecException . . . . . . . . . . . . . 134
puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached 135
puntoexe::imebra::codecs::jpegCodecException . . . . . . . . . . . . . . 138
puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax . . . . . . 137
puntoexe::imebra::dataSetException . . . . . . . . . . . . . . . . . . . . . . 174
puntoexe::imebra::dataSetCorruptedOffsetTable . . . . . . . . . . . . . . 173
puntoexe::imebra::dataSetExceptionDifferentFormat . . . . . . . . . . . 175
puntoexe::imebra::dataSetExceptionOldFormat . . . . . . . . . . . . . . 176
puntoexe::imebra::dataSetExceptionUnknownTransferSyntax . . . . . . . 177
puntoexe::imebra::dataSetExceptionWrongFrame . . . . . . . . . . . . . 178
puntoexe::imebra::dataSetImageDoesntExist . . . . . . . . . . . . . . . . 179
puntoexe::imebra::dicomDictionary . . . . . . . . . . . . . . . . . . . . . . 180
puntoexe::imebra::dicomDirException . . . . . . . . . . . . . . . . . . . . . 188
puntoexe::imebra::dicomDirCircularReferenceException . . . . . . . . . 187
puntoexe::imebra::dicomDirUnknownDirectoryRecordType . . . . . . . . 189
puntoexe::imebra::imageException . . . . . . . . . . . . . . . . . . . . . . . 237
puntoexe::imebra::imageExceptionInvalidSize . . . . . . . . . . . . . . . 238
puntoexe::imebra::imageExceptionUnknownColorSpace . . . . . . . . . 239
puntoexe::imebra::imageExceptionUnknownDepth . . . . . . . . . . . . 240
puntoexe::imebra::lutException . . . . . . . . . . . . . . . . . . . . . . . . . 246
puntoexe::imebra::lutExceptionCorrupted . . . . . . . . . . . . . . . . . 247
puntoexe::imebra::lutExceptionWrongIndex . . . . . . . . . . . . . . . . 248
puntoexe::imebra::transaction . . . . . . . . . . . . . . . . . . . . . . . . . . 249
puntoexe::imebra::transforms::transformException . . . . . . . . . . . . . . 293
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryException259
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExceptionNoTransform260
puntoexe::imebra::transforms::drawBitmapException . . . . . . . . . . . 278
puntoexe::imebra::transforms::drawBitmapExceptionDataSetNotDeclared279
puntoexe::imebra::transforms::drawBitmapExceptionImageNotDeclared280
puntoexe::imebra::transforms::drawBitmapExceptionInvalidAlignByte 281
puntoexe::imebra::transforms::drawBitmapExceptionInvalidArea . . . 282
puntoexe::imebra::transforms::transformExceptionDataInputImageDefined 294
puntoexe::imebra::transforms::transformExceptionDataSetNotDefined . . 295
puntoexe::imebra::transforms::transformExceptionOutputImageNotDefined296
puntoexe::imebra::view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
puntoexe::lockCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . 323
puntoexe::lockMultipleObjects . . . . . . . . . . . . . . . . . . . . . . . . . 324
puntoexe::lockObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
puntoexe::memoryPool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
puntoexe::ptr< objectType > . . . . . . . . . . . . . . . . . . . . . . . . . . 336
puntoexe::streamException . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
puntoexe::streamExceptionClose . . . . . . . . . . . . . . . . . . . . . . 348
puntoexe::streamExceptionEOF . . . . . . . . . . . . . . . . . . . . . . 349
puntoexe::streamExceptionOpen . . . . . . . . . . . . . . . . . . . . . . 350
puntoexe::streamExceptionRead . . . . . . . . . . . . . . . . . . . . . . 351
puntoexe::streamExceptionWrite . . . . . . . . . . . . . . . . . . . . . . 352
puntoexe::streamJpegTagInStream . . . . . . . . . . . . . . . . . . . . . 353
puntoexe::threadException . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
puntoexe::threadExceptionAlreadyRunning . . . . . . . . . . . . . . . . 367
Class Index
Here are the classes, structs, unions and interfaces with brief descriptions:
puntoexe::baseObject (This is the base class of the library. Almost all the
classes in the library are derived from this one ) . . . . . . . . . . . 85
puntoexe::baseStream (This class represents a stream (p. 340) ) . . . . . . . 89
puntoexe::charsetConversionException (Base class for the exceptions
thrown by charsetConversion ) . . . . . . . . . . . . . . . . . . . . 91
puntoexe::charsetConversionExceptionNoSupportedTable (Exception
thrown when the requested charset is not supported by the system ) . 92
puntoexe::charsetConversionExceptionNoTable (Exception thrown when
the requested charset is not supported by the DICOM standard ) . . 93
puntoexe::charsetConversionExceptionUtfSizeNotSupported (Exception
thrown when the system doesn’t have a supported size for wchar_t ) 94
puntoexe::criticalSection (This class represents a critical section ) . . . . . . 95
puntoexe::exceptionInfo (This class is used to store the information related
to the points where the exceptions are being caught&thrown ) . . . . 97
puntoexe::exceptionsManager (One statically allocated instance of this
class logs the stack positions while an exception is being processed ) 100
puntoexe::huffmanTable (This class calculates the huffman table from a set
of values and their frequency, and can read or write huffman codes
from/to a baseStream (p. 89) object ) . . . . . . . . . . . . . . . . 103
puntoexe::imebra::buffer (This class manages a memory (p. 328) area con-
taining data (p. 139) in dicom format ) . . . . . . . . . . . . . . . . 107
puntoexe::imebra::bufferException (This is the base class for the excep-
tions thrown by the buffer (p. 107) class ) . . . . . . . . . . . . . . 113
puntoexe::imebra::bufferExceptionUnknownType (This exception is
throw by the buffer (p. 107) when an handler for an unknown data
(p. 139) type is asked ) . . . . . . . . . . . . . . . . . . . . . . . . 114
puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault (This
exception is thrown when a conversion from an unicode string
causes the dicom dataSet (p. 155) to change its default charset ) . . 115
54 Class Index
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExceptionNoTransform
(This exception is thrown by the function colorTransformsFac-
tory::getTransform() (p. 255) when it cannot find any transform
(p. 285) that can convert the specified color spaces ) . . . . . . . . . 260
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2
(Transforms an image (p. 232) from the colorspace
MONOCHROME1 into the color space MONOCHROME2
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB
(Transforms an image (p. 232) from the colorspace
MONOCHROME1 into the color space RGB ) . . . . . . . . . . . 262
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToMONOCHROME1
(Transforms an image (p. 232) from the colorspace
MONOCHROME2 into the color space MONOCHROME1
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB
(Transforms an image (p. 232) from the colorspace
MONOCHROME2 into the color space RGB ) . . . . . . . . . . . 264
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFULL
(Transforms an image (p. 232) from the colorspace
MONOCHROME2 into the color space YBR_FULL ) . . . . . . . 265
puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB
(Transforms an image (p. 232) from the colorspace PALETTE
COLOR into the color space RGB ) . . . . . . . . . . . . . . . . . 266
puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2
(Transforms an image (p. 232) from the colorspace RGB into the
color space MONOCHROME2 ) . . . . . . . . . . . . . . . . . . . 268
puntoexe::imebra::transforms::colorTransforms::RGBToPALETTECOLOR
(Transforms an image (p. 232) from the colorspace RGB into the
color space PALETTE COLOR ) . . . . . . . . . . . . . . . . . . . 269
puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL
(Transforms an image (p. 232) from the colorspace RGB into the
color space YBR_FULL ) . . . . . . . . . . . . . . . . . . . . . . . 270
puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL
(Transforms an image (p. 232) from the colorspace RGB into the
color space YBR_PARTIAL ) . . . . . . . . . . . . . . . . . . . . 271
puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2
(Transforms an image (p. 232) from the colorspace YBR_FULL
into the color space MONOCHROME2 ) . . . . . . . . . . . . . . . 272
puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB
(Transforms an image (p. 232) from the colorspace YBR_FULL
into the color space RGB ) . . . . . . . . . . . . . . . . . . . . . . 273
puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB
(Transforms an image (p. 232) from the colorspace YBR_-
PARTIAL into the color space RGB ) . . . . . . . . . . . . . . . . 274
puntoexe::imebra::transforms::drawBitmap (This transform (p. 285)
takes an image (p. 232) as an input and returns an 8 bit RGB bitmap
of the requested image’s area; the image’s area is expanded or re-
duced to fit into the destination bitmap’s size ) . . . . . . . . . . . . 275
File Index
configuration.h (Declaration of the basic data types and of the platform flags
(Posix or Windows) ) . . . . . . . . . . . . . . . . . . . . . . . . . 389
criticalSection.cpp (Implementation of the critical sections ) . . . . . . . . . 391
criticalSection.h (Declaration of the functions that handle the the mutexes ) . 392
data.cpp (Implementation of the data class ) . . . . . . . . . . . . . . . . . . 393
data.h (Declaration of class used to store a single tag ) . . . . . . . . . . . . 394
dataCollection.h (Declaration of the base class used by the dataSet and the
dataGroup classes ) . . . . . . . . . . . . . . . . . . . . . . . . . . 395
dataGroup.cpp (Implementation of the dataGroup class ) . . . . . . . . . . . 396
dataGroup.h (Declaration of the class used to store a single dicom group ) . 397
dataHandler.cpp (Implementation of the base class for the data handlers ) . . 398
dataHandler.h (Declaration of the base class used by all the data handlers ) . 399
dataHandlerDate.cpp (Implementation of the dataHandlerDate class ) . . . 400
dataHandlerDate.h (Declaration of the data handler able to handle the di-
com tags of type "DA" (date) ) . . . . . . . . . . . . . . . . . . . . 401
dataHandlerDateTime.cpp (Implementation of the dataHandlerDateTime
class ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
dataHandlerDateTime.h (Declaration of the handler for the date and time ) . 403
dataHandlerDateTimeBase.cpp (Implementation of the base class for the
date/time handlers ) . . . . . . . . . . . . . . . . . . . . . . . . . . 404
dataHandlerDateTimeBase.h (Declaration of the base class for the time/-
date handlers ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
dataHandlerNumeric.h (Declaration of the handler for the numeric tags ) . . 406
dataHandlerString.cpp (Implementation of the base class for the string han-
dlers ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
dataHandlerString.h (Declaration of the base class used by the string han-
dlers ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
dataHandlerStringAE.cpp (Implementation of the class dataHandler-
StringAE ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
dataHandlerStringAE.h (Declaration of the class dataHandlerStringAE ) . . 410
dataHandlerStringAS.cpp (Implementation of the class dataHandler-
StringAS ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
dataHandlerStringAS.h (Declaration of the class dataHandlerStringAS ) . . 412
dataHandlerStringCS.cpp (Implementation of the class dataHandler-
StringCS ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
dataHandlerStringCS.h (Declaration of the class dataHandlerStringCS ) . . 414
dataHandlerStringDS.cpp (Implementation of the class dataHandler-
StringDS ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
dataHandlerStringDS.h (Declaration of the class dataHandlerStringDS ) . . 416
dataHandlerStringIS.cpp (Implementation of the class dataHandler-
StringIS ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
dataHandlerStringIS.h (Declaration of the class dataHandlerStringIS ) . . . 418
dataHandlerStringLO.cpp (Implementation of the class dataHandler-
StringLO ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
dataHandlerStringLO.h (Declaration of the class dataHandlerStringLO ) . . 420
dataHandlerStringLT.cpp (Implementation of the class dataHandler-
StringLT ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
dataHandlerStringLT.h (Declaration of the class dataHandlerStringLT ) . . 422
dataHandlerStringPN.cpp (Implementation of the class dataHandler-
StringPN ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Namespace Documentation
Namespaces
• namespace imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class ptr
This class must be used to allocate objects derived from the class baseObject (p. 85).
• class baseObject
This is the base class of the library. Almost all the classes in the library are derived
from this one.
• class lockObject
Locks the access to an object of type baseObject (p. 85).
• class lockMultipleObjects
Locks the access to several objects of type baseObject (p. 85).
• class baseStream
This class represents a stream (p. 340).
• class streamException
The base exception for all the exceptions thrown by the function in baseStream (p. 89).
68 Namespace Documentation
• class streamExceptionOpen
Exception thrown when the stream (p. 340) cannot be open.
• class streamExceptionRead
Exception thrown when there is an error during the read phase.
• class streamExceptionWrite
Exception thrown when there is an error during the write phase.
• class streamExceptionClose
Exception thrown when there are problems during the closure of the stream (p. 340).
• class charsetConversionException
Base class for the exceptions thrown by charsetConversion.
• class charsetConversionExceptionNoTable
Exception thrown when the requested charset is not supported by the DICOM stan-
dard.
• class charsetConversionExceptionNoSupportedTable
Exception thrown when the requested charset is not supported by the system.
• class charsetConversionExceptionUtfSizeNotSupported
Exception thrown when the system doesn’t have a supported size for wchar_t.
• class criticalSection
This class represents a critical section.
• class lockCriticalSection
This class locks a critical section in the constructor and unlocks it in the destructor.
• class exceptionInfo
This class is used to store the information related to the points where the exceptions
are being caught&thrown.
• class exceptionsManager
One statically allocated instance of this class logs the stack positions while an excep-
tion is being processed.
• class huffmanTable
This class calculates the huffman table from a set of values and their frequency, and
can read or write huffman codes from/to a baseStream (p. 89) object.
• class memory
This class is used to supply a reference counter to a string of bytes.
• class memoryPool
Stores unused memory (p. 328) objects (see puntoexe::memory (p. 328)) so they can
be reused when needed.
• class memoryStream
This class derives from the baseStream (p. 89) class and implements a memory
(p. 328) stream (p. 340).
• class nullStream
This class derives from the baseStream (p. 89) class and implements a null stream
(p. 340).
• class stream
This class derives from the baseStream (p. 89) class and implements a file stream
(p. 340).
• class streamController
This class represents a stream (p. 340) controller. A stream (p. 340) controller can
read or write data from/to a stream (p. 340).
• class streamExceptionEOF
Exception thrown when an attempt to read past the end of the file is made.
• class streamJpegTagInStream
Exception thrown when a jpeg tag is found but wasn’t expected.
• class streamReader
Represents a stream (p. 340) reader. A stream (p. 340) reader can read data from
a stream (p. 340). Several stream (p. 340) readers can share a single baseStream
(p. 89) derived object.
• class streamWriter
Use this class to write into a baseStream (p. 89) derived class.
• class thread
This class represents a thread (p. 363).
• class threadException
This is used as the base class for the exceptions thrown by the class thread (p. 363).
• class threadExceptionAlreadyRunning
Exception thrown by thread (p. 363) when an attempt to run an already running
thread (p. 363) is made.
Namespaces
• namespace codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
• namespace handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
• namespace transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class buffer
This class manages a memory (p. 328) area containing data (p. 139) in dicom format.
• class bufferException
This is the base class for the exceptions thrown by the buffer (p. 107) class.
• class bufferExceptionUnknownType
This exception is throw by the buffer (p. 107) when an handler for an unknown data
(p. 139) type is asked.
• class data
Represents a single Dicom Tag.
• class dataCollectionIterator
This class accesses to all the data stored in a dataCollection (p. 145) derived class
(dataGroup (p. 150) or dataSet (p. 155)).
• class dataCollection
This class stores a collection of Dicom tags or groups (classes pun-
toexe::imebra::data (p. 139) or puntoexe::imebra::dataGroup (p. 150)). It is used
as base class by dataGroup (p. 150) and dataSet (p. 155).
• class dataGroup
Represents a Dicom group which stores a group of Dicom tags.
• class dataSet
A data (p. 139) set is a collection of groups of tags (see dataGroup (p. 150)).
• class dataSetException
This is the base class for the exceptions thrown by the dataSet (p. 155).
• class dataSetExceptionDifferentFormat
This exception is thrown when the application is trying to store an image (p. 232) in
the dataSet (p. 155) but the dataSet (p. 155) already stores other images that have
different attributes.
• class dataSetExceptionUnknownTransferSyntax
This exception is thrown when an unknown transfer syntax is being used while reading
or writing a stream (p. 340).
• class dataSetExceptionWrongFrame
This exception is thrown when the application is storing several images in the dataSet
(p. 155) but doesn’t store them in the right order.
• class dataSetExceptionOldFormat
This exception is thrown when the application is trying to store an image (p. 232) in
an old Dicom format.
• class dataSetImageDoesntExist
This exception is thrown when the an image (p. 232) that doesn’t exist is requested.
• class dataSetCorruptedOffsetTable
This exception is thrown when the basic offset table is corrupted.
• class dicomDictionary
The Dicom Dictionary.
• class directoryRecord
directoryRecord (p. 190) represents a single record in a DICOMDIR structure (see
dicomDir (p. 183)).
• class dicomDir
A dicomDir (p. 183) object contains the information about the tree structure of a
DICOMDIR dataset.
• class dicomDirException
Base class from which the exceptions thrown by directoryRecord (p. 190) and di-
comDir (p. 183) derive.
• class dicomDirCircularReferenceException
This exception is thrown when a call to dicomDir::setFirstRootRecord()
(p. 185) or directoryRecord::setNextRecord() (p. 193) or di-
rectoryRecord::setFirstChildRecord() (p. 193) or directo-
ryRecord::setReferencedRecord() (p. 193) causes a circular reference between
directoryRecord (p. 190) objects.
• class dicomDirUnknownDirectoryRecordType
Exception thrown when an unknown record type is detected in directo-
ryRecord::getType() (p. 193), directoryRecord::getTypeString() (p. 193), directo-
ryRecord::setType() (p. 194) or directoryRecord::setTypeString() (p. 194).
• class image
Represents a single image (p. 232) of a dicom data (p. 139) set.
• class imageException
This is the base class for the exceptions thrown by the image (p. 232) class.
• class imageExceptionUnknownDepth
This exception is thrown when an unknown depth is specified as a parameter.
• class imageExceptionUnknownColorSpace
This exception is thrown when an unknown color space is specified in the function
create().
• class imageExceptionInvalidSize
This exception is thrown when an invalid size in pixels is specified in the function
create().
• class lut
Represents a Lookup table (LUT).
• class lutException
This is the base class for the exceptions thrown by the lut (p. 241) class.
• class lutExceptionWrongIndex
This exception is thrown by the lut (p. 241) class when the wrong index or id is speci-
fied as a parameter.
• class lutExceptionCorrupted
This exception is thrown by the lut (p. 241) class when the the LUT information is
corrupted.
• class transaction
Represents a single transaction (p. 249).
• class view
This class can be used as a base class by the windows that need to display a Dicom
image (p. 232).
• class waveform
Represents a single waveform (p. 319) of a dicom dataset.
All the functions related to the dicom standard are defined in this namespace.
Some of the classes are grouped in namespaces that are children of this one (like
puntoexe::imebra::codecs (p. 75), puntoexe::imebra::handlers (p. 77) and pun-
toexe::imebra::transforms (p. 79)).
The functions in this namespace may use some classes defined in the parent namespace
puntoexe (p. 67).
Classes
• class codec
This is the base class for all the imebra (p. 71) codecs (p. 75).
• class codecException
This is the base class for the exceptions thrown by the codec (p. 117) derived classes.
• class codecExceptionWrongFormat
This exception is thrown when the file being parsed is not valid for the codec (p. 117).
• class codecExceptionCorruptedFile
This exception is thrown when the file being parsed is corrupted.
• class codecExceptionWrongTransferSyntax
This exception is thrown when the transfer syntax is not recognized by the codec
(p. 117).
• class codecFactory
This class maintains a list of the available codecs (p. 75).
• class dicomCodec
The Dicom codec (p. 117).
• class dicomCodecException
This is the base class for the exceptions thrown by the dicom codec (p. 117) (dicom-
Codec (p. 131)).
• class dicomCodecExceptionDepthLimitReached
This exception is thrown when dicomCodec::parseStream (p. 132) reaches the maxi-
mum depth for embedded datasets.
• class jpegCodec
The Jpeg codec (p. 117).
• class jpegCodecException
Base class for the exceptions thrown by the jpeg codec (p. 117).
• class jpegCodecCannotHandleSyntax
Exception thrown when the jpeg variant cannot be handled.
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Classes
• class dataHandler
This is the base class for all the imebra (p. 71) data (p. 139) handlers (p. 77).
A data (p. 139) handler allows to read/write the data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) object without worrying about the data format.
• class dataHandlerDate
This data handler is returned by the class buffer (p. 107) when the application wants
to deal with a dicom tag of type "DA" (date).
• class dataHandlerDateTimeBase
This class is used as base class by the handlers (p. 77) that manage the date and the
time.
• class dataHandlerNumeric
This data (p. 139) handler accesses to the numeric data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) class.
• class dataHandlerRaw
A dataHandlerRaw (p. 216) always "sees" the data (p. 139) as a collection of bytes,
no matter what the Dicom data (p. 139) type is.
• class dataHandlerString
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings.
• class dataHandlerStringAE
Handles the Dicom data (p. 139) type "AE" (application entity.
• class dataHandlerStringAS
Handles the Dicom data (p. 139) type "AS" (age string).
• class dataHandlerStringCS
Handles the Dicom data (p. 139) type "CS" (code string).
• class dataHandlerStringDS
Handles the Dicom type "DS" (decimal string).
• class dataHandlerStringIS
Handles the Dicom type "IS" (integer string).
• class dataHandlerStringPN
Handles the Dicom type "PN" (person name).
• class dataHandlerStringUnicode
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings
that need to be converted from different unicode charsets.
• class dataHandlerTime
This data handler is returned by the class buffer (p. 107) when the application wants
to deal with a dicom tag of type "TM" (time).
Typedefs
• typedef dataHandlerNumeric< imbxInt32 > imageHandler
Represents an handler specialized to work with the image (p. 232) data (p. 139).
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Represents an handler specialized to work with the image (p. 232) data (p. 139).
The image (p. 232) data (p. 139) is always interleaved and is never subsampled.
The application never needs to resize the data (p. 139) managed by this handler because
the image (p. 232) object does this.
Namespaces
• namespace colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class drawBitmap
This transform (p. 285) takes an image (p. 232) as an input and returns an 8 bit RGB
bitmap of the requested image’s area; the image’s area is expanded or reduced to fit
into the destination bitmap’s size.
• class drawBitmapException
Base class used for the exceptions thrown by drawBitmap (p. 275).
• class drawBitmapExceptionDataSetNotDeclared
This exception is thrown by declareInputImage() if the dataSet (p. 155) hasn’t been
declared yet.
• class drawBitmapExceptionImageNotDeclared
This exception is thrown by doTransform() if the image (p. 232) hasn’t been declared
yet.
• class drawBitmapExceptionInvalidArea
This exception is thrown by declareBitmapType() if the image’s area that has to be
generated is not valid.
• class drawBitmapExceptionInvalidAlignByte
This exception is thrown by declareBitmapType() if the align byte is illegal (1, 2 and
4 are the typical values).
• class modalityVOILUT
This class transforms (p. 79) the pixel values of the image (p. 232) retrieved from the
dataset into values that are meaningful to th application.
• class modalityVOILUTInverse
Executes the inverse modality VOI/LUT transformation (see modalityVOILUT
(p. 283)).
• class transform
This is the base class for the transforms (p. 79).
• class transformException
This is the base class of the exceptions thrown by the classes derived from transform
(p. 285).
• class transformExceptionDataSetNotDefined
This exception is thrown by the transforms (p. 79) that need a defined dataSet (p. 155)
(see declareDataSet()) but don’t have any.
• class transformExceptionDataInputImageDefined
This exception is thrown by a transforms (p. 79) when an input image (p. 232) is
required but hasn’t been defined (see declareInputImage()).
• class transformExceptionOutputImageNotDefined
This exception is thrown by a transforms (p. 79) when an output image (p. 232) is
required but hasn’t been defined (see declareOutputImage()).
• class transformBuffers
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels.
• class transformBuffersInputOutput
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and need two different buffers (one for the input image (p. 232) and one for the
outpu image (p. 232)).
• class transformBuffersInPlace
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and don’t need two different buffers (input & output) but can work on a single
buffer (p. 107) that contains the input and output data (p. 139).
• class transformHighBit
Shift the image’s content to adapt it to the specified high bit.
• class transformsChain
Executes a sequence of transforms (p. 79).
• class VOILUT
Transform the value of the input image’s pixels by using the presentation VOI/LUT
defined in the dataSet (p. 155).
• class VOILUTInverse
Execute the inverse of the transformation executed by VOILUT (p. 300).
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
A transform (p. 285) is an object that takes some images as input parameters and
returns some images as a result of a transformation or analysis.
12.6 puntoexe::imebra::transforms::colorTransforms
Namespace Reference
This namespace contains all the classes involved in the transformation between several
color spaces.
Classes
• class colorTransform
This is the base class used by the color transforms (p. 79) classes.
• class colorTransformsFactory
This class maintains a list of all the available colorTransform (p. 251) classes and
retrieve the most appropriate transform (p. 285) class (or classes) when a color space
conversion is needed.
• class colorTransformsFactoryException
This is the base class for the exceptions thrown by colorTransformsFactory (p. 253).
• class colorTransformsFactoryExceptionNoTransform
This exception is thrown by the function colorTransformsFactory::getTransform()
(p. 255) when it cannot find any transform (p. 285) that can convert the specified
color spaces.
• class MONOCHROME1ToMONOCHROME2
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space MONOCHROME2.
• class MONOCHROME2ToMONOCHROME1
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space MONOCHROME1.
• class MONOCHROME1ToRGB
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space RGB.
• class MONOCHROME2ToRGB
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space RGB.
• class MONOCHROME2ToYBRFULL
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space YBR_FULL.
• class PALETTECOLORToRGB
Transforms an image (p. 232) from the colorspace PALETTE COLOR into the color
space RGB.
• class RGBToMONOCHROME2
Transforms an image (p. 232) from the colorspace RGB into the color space
MONOCHROME2.
• class RGBToPALETTECOLOR
Transforms an image (p. 232) from the colorspace RGB into the color space
PALETTE COLOR.
• class RGBToYBRFULL
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
FULL.
• class RGBToYBRPARTIAL
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
PARTIAL.
• class YBRFULLToMONOCHROME2
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
MONOCHROME2.
• class YBRFULLToRGB
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
RGB.
• class YBRPARTIALToRGB
Transforms an image (p. 232) from the colorspace YBR_PARTIAL into the color space
RGB.
This namespace contains all the classes involved in the transformation between several
color spaces.
The color transformation is performed on images (see puntoexe::imebra::image
(p. 232)).
Class Documentation
This is the base class of the library. Almost all the classes in the library are derived
from this one.
#include <baseObject.h>
Inheritance diagram for puntoexe::baseObject::
86 Class Documentation
puntoexe::baseObject
puntoexe::baseStream
puntoexe::exceptionsManager
puntoexe::huffmanTable
puntoexe::imebra::buffer
puntoexe::imebra::codecs::codec
puntoexe::imebra::codecs::codecFactory
puntoexe::imebra::data
puntoexe::imebra::dicomDir
puntoexe::imebra::directoryRecord
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::image
puntoexe::imebra::lut
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactory
puntoexe::imebra::transforms::transform
puntoexe::imebra::waveform
puntoexe::memory
puntoexe::streamController
puntoexe::thread
• bool isReferencedOnce ()
Returns one if the reference count is set to 1.
This is the base class of the library. Almost all the classes in the library are derived
from this one.
The class supplies a basic mechanism for multithrading locking and a reference
counter, used by the helper class ptr (p. 336).
At construction time the reference counter is set to 0 and must be incremented with
addRef(); the helper class ptr (p. 336) does this automatically.
Use release() to decrement the reference counter.
The object automatically destroy itself when the reference counter reaches 0, but only
if the function preDelete() returns true.
An object of type baseObject (p. 85) should never be deleted using the C++ statement
"delete".
In order to manage the reference counter easily your application should use the objects
derived from baseObject (p. 85) through the helper class ptr (p. 336).
The locking mechanism is exposed through the class lockObject (p. 326).
13.1.2.1 puntoexe::baseObject::baseObject ()
Creates the baseObject (p. 85) object. The reference counter is set to 0.
The object should be unallocated by the release() function, not by deleting it using the
C++ instruction delete.
In order to avoid mistakes and memory (p. 328) leaks, objects derived from baseOb-
ject (p. 85) should be assigned to a ptr (p. 336) object.
Creates the baseObject (p. 85) object and set an external object to be used for the lock.
The reference counter is set to 0.
The object should be unallocated by the release() function, not by deleting it using the
C++ instruction delete.
In order to avoid mistakes and memory (p. 328) leaks, objects derived from baseOb-
ject (p. 85) should be assigned to a ptr (p. 336) object.
Parameters:
externalLock a pointer to the object to use to lock this one
Returns:
true if the reference counter is set to 1
The documentation for this class was generated from the following files:
• baseObject.h
• baseObject.cpp
puntoexe::baseObject
puntoexe::baseStream
Parameters:
startPosition the position in the file from which the data has to be read
pBuffer a pointer to the memory (p. 328) where the read data has to be placed
bufferLength the number of bytes to read from the file
Returns:
the number of bytes read from the file. When it is 0 then the end of the file has
been reached
Parameters:
startPosition the position in the file where the data has to be written
pBuffer pointer to the data that has to be written
bufferLength number of bytes in the data buffer that has to be written
The documentation for this class was generated from the following file:
• baseStream.h
puntoexe::charsetConversionException
• charsetConversion.h
13.4 puntoexe::charsetConversionExceptionNoSupportedTable
Class Reference
Exception thrown when the requested charset is not supported by the system.
#include <charsetConversion.h>
Inheritance diagram for puntoexe::charsetConversionExceptionNoSupportedTable::
puntoexe::charsetConversionException
puntoexe::charsetConversionExceptionNoSupportedTable
Exception thrown when the requested charset is not supported by the system.
The documentation for this class was generated from the following file:
• charsetConversion.h
13.5 puntoexe::charsetConversionExceptionNoTable
Class Reference
Exception thrown when the requested charset is not supported by the DICOM standard.
#include <charsetConversion.h>
Inheritance diagram for puntoexe::charsetConversionExceptionNoTable::
puntoexe::charsetConversionException
puntoexe::charsetConversionExceptionNoTable
Exception thrown when the requested charset is not supported by the DICOM standard.
The documentation for this class was generated from the following file:
• charsetConversion.h
13.6 puntoexe::charsetConversionExceptionUtfSizeNotSupported
Class Reference
Exception thrown when the system doesn’t have a supported size for wchar_t.
#include <charsetConversion.h>
Inheritance diagram for puntoexe::charsetConversionExceptionUtfSizeNotSupported::
puntoexe::charsetConversionException
puntoexe::charsetConversionExceptionUtfSizeNotSupported
Exception thrown when the system doesn’t have a supported size for wchar_t.
The documentation for this class was generated from the following file:
• charsetConversion.h
• virtual ∼criticalSection ()
Deallocates the critical section.
• void lock ()
Lock the critical section.
• void unlock ()
Decreases the reference counter of the critical section and unlocks it if the counter
reaches 0.
• bool tryLock ()
Try to lock a critical section.
13.7.2.1 puntoexe::criticalSection::criticalSection ()
A system crash is likely to happens in the case a critical section is destroyed while it is
in a locked state. For this reason the class lockCriticalSection (p. 323) should be used
instead of calling directly lock() (p. 96), unlock() (p. 96) or tryLock() (p. 96).
Returns:
true if the section has been succesfully locked or false otherwise
Decreases the reference counter of the critical section and unlocks it if the counter
reaches 0.
Use lock() (p. 96) to lock the critical section.
The documentation for this class was generated from the following files:
• criticalSection.h
• criticalSection.cpp
• std::wstring getMessage ()
Return the object’s content formatted in a string.
Public Attributes
• std::wstring m_functionName
The name of the function where the catch&throw is happening.
• std::string m_fileName
The name of the file where the catch&throw is happening.
• long m_lineNumber
The number of the line where the catch&throw is happening.
• std::string m_exceptionType
The type of the exception being rethrown.
• std::string m_exceptionMessage
The message embedded in the exception.
This class is used to store the information related to the points where the exceptions
are being caught&thrown.
The application can use the macros PUNTOEXE_FUNCTION_START() (p. 453),
PUNTOEXE_FUNCTION_END() (p. 453), PUNTOEXE_THROW() (p. 454) and
PUNTOEXE_RETHROW() (p. 454) inside its function: the macros take care of log-
ging in the exceptions manager the source code’s lines travelled by an exception while
it is being thrown to the catch point.
Parameters:
functionName the name of the function where the catch&throw is happening
fileName the name of the file where the catch&throw is happening
lineNumber the line where the catch&throw is happening
exceptionType the type of the exception being rethrown
exceptionMessage the message embedded in the exception being rethrown
Returns:
the object’s content formatted in a string
• exception.h
• exception.cpp
puntoexe::baseObject
puntoexe::exceptionsManager
Public Types
• typedef std::list< exceptionInfo > tExceptionInfoList
Defines a list of exceptionInfo (p. 97) objects.
One statically allocated instance of this class logs the stack positions while an exception
is being processed.
In order to log the stack position the application must use the following macros inside
its functions:
The final catch block that processes the exception and doesn’t rethrow it should call ex-
ceptionsManager::getMessage() (p. 102) in order to retrieve the exception’s history.
The retrieved message will contain the position of the first throw statement and the
positions of the PUNTOEXE_FUNCTION_END() (p. 453) macros that rethrown the
exception.
All the catch blocks that don’t rethrow the catched exception and solve the exception’s
cause should call exceptionsManager::getMessage() (p. 102) to empty the messages
stack.
Add an exceptionInfo (p. 97) object to the active thread’s information list.
This function is called by PUNTOEXE_FUNCTION_END() (p. 453) when an un-
caught exception is found.
Parameters:
info the info object that must be added to the active thread’s information list
Clear the information list for the active thread (p. 363).
Fill the list with all the collected exceptionInfo (p. 97) objects for the current thread
(p. 363).
The function also clears the information list of the current thread (p. 363).
Parameters:
pList a pointer to the list that will be filled with a copy of the exceptionInfo (p. 97)
objects collected before the call.
Returns the same information returned by getExceptionInfo() (p. 101), but formatted
in a text message.
The function also clears the information list for the current thread (p. 363).
Returns:
the information formatted as a text message
The documentation for this class was generated from the following files:
• exception.h
• exception.cpp
puntoexe::baseObject
puntoexe::huffmanTable
• void reset ()
Reset the internal data of the huffmanTable (p. 103) class.
• void calcHuffmanTables ()
Generates the huffman table used by readHuffmanCode() (p. 105) and writeHuff-
manCode() (p. 106).
• void removeLastCode ()
Remove the code with the higher value and the longer code from the code lengths
table.
Huffman I/O
Read and decode an huffman code from the specified stream (p. 340).
This class calculates the huffman table from a set of values and their frequency, and
can read or write huffman codes from/to a baseStream (p. 89) object.
Construct the huffman table and specify the maximum numbed of bits used by the
values to be encoded.
Parameters:
maxValueLength the maximum lenght, in bits, of the value that must be encoded.
Please note that this is not the length of the huffman values
Parameters:
maxCodeLength the maximum length in bits of the generated huffman codes.
Generates the huffman table used by readHuffmanCode() (p. 105) and writeHuff-
manCode() (p. 106).
Parameters:
value the value for wich the frequency must be increased. The number of bits that
form the value must be less or equal to the number of bits specified in the
constructor huffmanTable() (p. 104)
Read and decode an huffman code from the specified stream (p. 340).
The function throws a huffmanExceptionRead exception if the read code cannot be
decoded.
Parameters:
pStream a pointer to the stream (p. 340) reader used to read the code
Returns:
the decoded value
Remove the code with the higher value and the longer code from the code lengths table.
This function is usefull when extra data has been inserted through incValueFreq()
(p. 105) but must not generate an huffman code.
E.g.: the jpeg coded insert an extra value with low frequency to reserve the last gener-
ated huffman code, so the reserver huffman code will never be generated
The function removes all the calculated tables. The I/O functions readHuffmanCode()
(p. 105) and writeHuffmanCode() (p. 106) will not work until the tables are calculated
by calcHuffmanCodesLength and calcHuffmanTables() (p. 104).
Parameters:
code the value to be encoded and written to the stream (p. 340)
pStream a pointer to the stream (p. 340) writer used to write the code
The documentation for this class was generated from the following files:
• huffmanTable.h
• huffmanTable.cpp
puntoexe::baseObject
puntoexe::imebra::buffer
Data handlers
Stream
• imbxUint32 getBufferSizeBytes ()
Return the current buffer’s size in bytes.
Stream
• std::string getDataType ()
Returns the buffer’s data (p. 139) type.
Charsets
This class manages a memory (p. 328) area containing data (p. 139) in dicom format.
A buffer (p. 107) also stores the data (p. 139) type of the elements stored in it. The
data (p. 139) type is in Dicom format (two upper case chars).
The memory (p. 328) can be accessed through a handlers::dataHandler (p. 195) de-
rived object obtained by calling the function getDataHandler() (p. 110).
Data handlers (p. 77) work on a copy of the buffer (p. 107), then most of the problem
related to the multithreading enviroments are avoided.
The data (p. 139) handlers (p. 77) supply several functions that allow to access to the
data (p. 139) in several formats (strings, numeric, time, and so on).
Constructor. Initialize the buffer (p. 107) object and set the default data (p. 139) type.
If no data (p. 139) type is specified, then the Dicom data (p. 139) type "OB" is used.
Parameters:
externalLock a pointer to an object to be used to lock this one (see baseObject
(p. 85)). If set to zero then a local locker will be used
defaultType a string with the buffer’s type. The buffer’s type must be one of the
Dicom data (p. 139) types. A dicom’s data (p. 139) type is formed by two
uppercase chars
Constructor. Initialize the buffer (p. 107) object and declare the buffer’s content on
demand.
On demand content is loaded from the original stream (p. 340) when the application
requires the access to the buffer (p. 107).
Parameters:
externalLock a pointer to an object to be used to lock this one (see baseObject
(p. 85)). If set to zero then a local locker will be used
defaultType a string with the buffer’s type. The buffer’s type must be one of the
Dicom data (p. 139) types. A dicom’s data (p. 139) type is formed by two
uppercase chars
originalStream the stream (p. 340) from which the content can be read
bufferPosition the first stream’s byte that contains the buffer’s content
bufferLength the buffer’s content length, in bytes
wordLength the size of a buffer’s element, in bytes
endianType the stream’s endian type
Returns:
the buffer’s size, in bytes
If during the operation an error is detected (diffetent objects use different default
charsets) then the exception charsetListExceptionDiffDefault is thrown.
Parameters:
pCharsetsList a pointer to a list that will be filled with the used charsets
Retrieve a data (p. 139) handler that can be used to read, write and resize the memory
(p. 328) controlled by the buffer (p. 107).
The data (p. 139) handler will have access to a local copy of the buffer (p. 107), then
it will not have to worry about multithreading related problems. If a writing handler is
requested, then the handler’s local buffer (p. 107) will be copied back into the buffer
(p. 107) when the handler will be destroyed.
Parameters:
bWrite set to true if you want to write into the buffer (p. 107)
size this parameter is used only when the parameter bWrite is set to true and the
buffer (p. 107) is empty: in this case, the returned buffer (p. 107) will be
resized to the number of elements (NOT bytes) declared in this parameter
Returns:
a pointer to a dataHandler object
Retrieve a raw data (p. 139) handler that can be used to read, write and resize the
memory (p. 328) controlled by the buffer (p. 107).
Raw data (p. 139) handlers (p. 77) always see a collection of bytes, regardless of the
original buffer’s type.
The data (p. 139) handler will have access to a local copy of the buffer (p. 107), then
it will not have to worry about multithreading related problems. If a writing handler is
requested, then the handler’s local buffer (p. 107) will be copied back into the buffer
(p. 107) when the handler will be destroyed.
Parameters:
bWrite set to true if you want to write into the buffer (p. 107)
size this parameter is used only when the parameter bWrite is set to true and the
buffer (p. 107) is empty: in this case, the returned buffer (p. 107) will be
resized to the number of bytes declared in this parameter
Returns:
a pointer to a dataHandler object
Returns:
a string with the buffer’s data (p. 139) type in Dicom format.
Returns:
a pointer to a stream (p. 340) reader
Returns:
a pointer to a stream (p. 340) writer
• "ISO_IR 101"
• "ISO_IR 109"
• "ISO_IR 110"
• "ISO_IR 144"
• "ISO_IR 127"
• "ISO_IR 126"
• "ISO_IR 138"
• "ISO_IR 148"
• "ISO_IR 13"
• "ISO_IR 166"
• "ISO 2022 IR 6"
• "ISO 2022 IR 100"
• "ISO 2022 IR 101"
• "ISO 2022 IR 109"
• "ISO 2022 IR 110"
• "ISO 2022 IR 144"
• "ISO 2022 IR 127"
• "ISO 2022 IR 126"
• "ISO 2022 IR 138"
• "ISO 2022 IR 148"
• "ISO 2022 IR 13"
• "ISO 2022 IR 166"
• "ISO 2022 IR 87"
• "ISO 2022 IR 159"
• "ISO 2022 IR 149"
• "ISO_IR 192" (UTF-8)
• "GB18030"
Parameters:
pCharsetsList a list of charsets that can be used by the dicom object. The default
charsets must be the first item in the list
The documentation for this class was generated from the following files:
• buffer.h
• buffer.cpp
puntoexe::imebra::bufferException
puntoexe::imebra::bufferExceptionUnknownType
This is the base class for the exceptions thrown by the buffer (p. 107) class.
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• buffer.h
13.13 puntoexe::imebra::bufferExceptionUnknownType
Class Reference
This exception is throw by the buffer (p. 107) when an handler for an unknown data
(p. 139) type is asked.
#include <buffer.h>
Inheritance diagram for puntoexe::imebra::bufferExceptionUnknownType::
puntoexe::imebra::bufferException
puntoexe::imebra::bufferExceptionUnknownType
This exception is throw by the buffer (p. 107) when an handler for an unknown data
(p. 139) type is asked.
13.13.2.1 puntoexe::imebra::bufferExceptionUnknownType::bufferExceptionUnknownType
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• buffer.h
13.14 puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault
Class Reference
This exception is thrown when a conversion from an unicode string causes the dicom
dataSet (p. 155) to change its default charset.
#include <charsetsList.h>
Inheritance diagram for puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault::
puntoexe::imebra::charsetsList::charsetsListException
puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault
This exception is thrown when a conversion from an unicode string causes the dicom
dataSet (p. 155) to change its default charset.
For instace, the default charset is ISO IR 6 but a value written by the application in one
tag causes the default charset to switch to ISO 2022 IR 100.
The documentation for this class was generated from the following file:
• charsetsList.h
13.15 puntoexe::imebra::charsetsList::charsetsListException
Class Reference
This is the base class for the exceptions thrown by the class charsetsList.
#include <charsetsList.h>
Inheritance diagram for puntoexe::imebra::charsetsList::charsetsListException::
puntoexe::imebra::charsetsList::charsetsListException
puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault
This is the base class for the exceptions thrown by the class charsetsList.
The documentation for this class was generated from the following file:
• charsetsList.h
puntoexe::baseObject
puntoexe::imebra::codecs::codec
puntoexe::imebra::codecs::dicomCodec puntoexe::imebra::codecs::jpegCodec
• void write (ptr< streamWriter > pDestStream, ptr< dataSet > pSource-
DataSet)
Write a dicom structure into a stream (p. 340).
This function returns the highest bit per channel supported by the specified transfer
syntax.
• virtual ptr< image > getImage (ptr< dataSet > pSourceDataSet, ptr<
streamReader > pSourceStream, std::string dataType)=0
Get a decompressed image (p. 232) from a dicom structure.
• virtual void setImage (ptr< streamWriter > pDestStream, ptr< image >
pSourceImage, std::wstring transferSyntax, quality imageQuality, std::string
dataType, imbxUint8 allocatedBits, bool bSubSampledX, bool bSubSampledY,
bool bInterleaved, bool b2Complement)=0
Stores an image (p. 232) into stream (p. 340).
This is the base class for all the imebra (p. 71) codecs (p. 75).
When the imebra (p. 71) codecs (p. 75) read the content of a file, they don’t return
a decompressed image (p. 232): instead they build a DICOM structure in memory
(p. 328), with the image(s) embedded in it.
A call to the dataSet::getImage() (p. 163) method will return the decompressed image
(p. 232) embedded into the dicom structure.
E.G: A call to jpegCodec::read() (p. 121) will build a dataSet (p. 155) object with a
jpeg image (p. 232) embedded in it. Your application should call dataSet::getImage()
(p. 163)in order to get the decompressed image (p. 232).
The same concept is used when your application must generate a file with a compressed
image (p. 232) in it. Your application should:
• generate the final file using the preferred codec (p. 117).
This enumeration is used by setImage() (p. 122) in order to setup the compression
parameters.
Enumerator:
veryHigh the image (p. 232) is saved with very high quality. No subsampling is
performed and no quantization
high the image (p. 232) is saved with high quality. No subsampling is performed.
Quantization ratios are low
aboveMedium the image (p. 232) is saved in medium quality. Horizontal sub-
sampling is applied. Quantization ratios are low
medium the image (p. 232) is saved in medium quality. Horizontal subsampling
is applied. Quantization ratios are medium
belowMedium the image (p. 232) is saved in medium quality. Horizontal and
vertical subsampling are applied. Quantization ratios are medium
low the image (p. 232) is saved in low quality. Horizontal and vertical subsam-
pling are applied. Quantization ratios are higher than the ratios used in the
belowMedium quality
veryLow the image (p. 232) is saved in low quality. Horizontal and vertical sub-
sampling are applied. Quantization ratios are high
This function returns true if the codec (p. 117) can handle the requested DICOM trans-
fer syntax.
Parameters:
transferSyntax the transfer syntax to check for
Returns:
true if the transfer syntax specified in transferSyntax can be handled by the codec
(p. 117), false otherwise.
Create another codec (p. 117) of the same type of the codec (p. 117) where the function
is being called.
Returns:
a pointer to a codec (p. 117) of the same type of the codec (p. 117) where the
function is being called
This function returns true if the codec (p. 117) transfer syntax handled by the code has
to be encapsulated.
Parameters:
transferSyntax the transfer syntax to check for
Returns:
true if the transfer syntax specified in transferSyntax has to be encapsulated
Parameters:
pSourceDataSet a pointer to the Dicom structure where the requested image
(p. 232) is embedded into
pSourceStream a pointer to a stream (p. 340) containing the data (p. 139) to be
parsed
dataType the data (p. 139) type of the buffer (p. 107) from which the stream
(p. 340) pSourceStream has been obtained. The data (p. 139) type must be
in DICOM format
Returns:
a pointer to the loaded image (p. 232)
This function returns the highest bit per channel supported by the specified transfer
syntax.
Parameters:
transferSyntax the transfer syntax for which the information is requested.
Returns:
the highest bit supported by the transfer syntax
Parameters:
pSourceStream Stream a pointer to the baseStream (p. 89) object to parse. If the
codec (p. 117) cannot parse the stream’s content, then the stream (p. 340) is
rewinded to its initial position.
maxSizeBufferLoad if a loaded buffer (p. 107) exceedes the size in the parameter
then it is not loaded immediatly but it will be loaded on demand. Some
codecs (p. 75) may ignore this parameter. Set to -1 to load all the buffers
immediatly
Returns:
a pointer to the loaded dataSet (p. 155)
Parameters:
pDestStream the stream (p. 340) where the compressed image (p. 232) must be
saved
pSourceImage the image (p. 232) to be saved into the stream (p. 340)
transferSyntax the transfer syntax to use for the compression
imageQuality the quality to use for the compression. Please note that the param-
eters bSubSampledX and bSubSampledY override the settings specified by
this parameter
dataType the data (p. 139) type of the tag that will contain the generated stream
(p. 340)
allocatedBits the number of bits per color channel
bSubSampledX true if the chrominance channels must be subsampled horizon-
tally, false otherwise
bSubSampledY true if the chrominance channels must be subsampled vertically,
false otherwise
bInterleaved true if the channels’ information must be interleaved, false if the
channels’ information must be flat (not interleaved)
b2Complement true if the image (p. 232) contains 2-complement data (p. 139),
false otherwise
Suggest an optimal number of allocated bits for the specified transfer syntax and high
bit.
Parameters:
transferSyntax the transfer syntax to use
highBit the high bit to use for the suggestion
Returns:
the suggested number of allocated bits for the specified transfer syntax and high
bit.
Parameters:
pDestStream a pointer to the stream (p. 340) to use for writing.
pSourceDataSet a pointer to the Dicom structure to write into the stream (p. 340)
The documentation for this class was generated from the following files:
• codec.h
• codec.cpp
13.17 puntoexe::imebra::codecs::codecException
Class Reference
This is the base class for the exceptions thrown by the codec (p. 117) derived classes.
#include <codec.h>
Inheritance diagram for puntoexe::imebra::codecs::codecException::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax
This is the base class for the exceptions thrown by the codec (p. 117) derived classes.
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• codec.h
13.18 puntoexe::imebra::codecs::codecExceptionCorruptedFile
Class Reference
This exception is thrown when the file being parsed is corrupted.
#include <codec.h>
Inheritance diagram for puntoexe::imebra::codecs::codecExceptionCorruptedFile::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::codecExceptionCorruptedFile
13.18.2.1 puntoexe::imebra::codecs::codecExceptionCorruptedFile::codecExceptionCorruptedFile
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• codec.h
13.19 puntoexe::imebra::codecs::codecExceptionWrongFormat
Class Reference
This exception is thrown when the file being parsed is not valid for the codec (p. 117).
#include <codec.h>
Inheritance diagram for puntoexe::imebra::codecs::codecExceptionWrongFormat::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::codecExceptionWrongFormat
This exception is thrown when the file being parsed is not valid for the codec (p. 117).
13.19.2.1 puntoexe::imebra::codecs::codecExceptionWrongFormat::codecExceptionWrongFormat
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• codec.h
13.20 puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax
Class Reference
This exception is thrown when the transfer syntax is not recognized by the codec
(p. 117).
#include <codec.h>
Inheritance diagram for puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax
This exception is thrown when the transfer syntax is not recognized by the codec
(p. 117).
13.20.2.1 puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax::codecExceptionWrongTransferSyntax
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• codec.h
puntoexe::baseObject
puntoexe::imebra::codecs::codecFactory
• ptr< dataSet > load (ptr< streamReader > pStream, imbxUint32 maxSize-
BufferLoad=0xffffffff)
Build a dataSet (p. 155) structure from the specified stream (p. 340) of data (p. 139).
Get a pointer to the codec (p. 117) that can handle the requested transfer syntax.
All the registered codecs (p. 75) are queried until the codec (p. 117) that can handle the
specified transfer syntax replies.
A new instance of the requested codec (p. 117) is allocated and its pointer is returned.
Parameters:
transferSyntax a string with the requested transfer syntax.
Returns:
a pointer to a imebra (p. 71) codec (p. 117) that can handle the requested transfer
syntax, or 0 if the function didn’t find any valid codec (p. 117). The returned
pointer references a new instance of the codec (p. 117), not the instance registered
using registerCodec() (p. 130)
Returns:
a pointer to the only instance of the codecFactory (p. 128) class.
Build a dataSet (p. 155) structure from the specified stream (p. 340) of data (p. 139).
The function selects automatically the codec (p. 117) that can read the specified stream
(p. 340).
Parameters:
pStream the stream (p. 340) that contain the data (p. 139) to be parsed
maxSizeBufferLoad if a loaded buffer (p. 107) exceedes the size in the parameter
then it is not loaded immediatly but it will be loaded on demand. Some
codecs (p. 75) may ignore this parameter. Set to 0xffffffff to load all the
buffers immediatly
Returns:
a pointer to the dataSet (p. 155) containing the parsed data (p. 139)
Parameters:
pCodec a pointer to the codec (p. 117) to register
The documentation for this class was generated from the following files:
• codecFactory.h
• codecFactory.cpp
puntoexe::baseObject
puntoexe::imebra::codecs::codec
puntoexe::imebra::codecs::dicomCodec
• void buildStream (ptr< streamWriter > pStream, ptr< dataSet > pDataSet,
bool bExplicitDataType, streamController::tByteOrdering endianType)
Write the dataSet (p. 155) to the specified stream (p. 340) in Dicom format, without
the file header and signature.
Write the dataSet (p. 155) to the specified stream (p. 340) in Dicom format, without
the file header and signature.
Parameters:
pStream the destination stream (p. 340)
pDataSet the dataSet (p. 155) to be written
bExplicitDataType true if the function must write the data (p. 139) type, false if
the data (p. 139) type is implicit
endianType the endian type to be generated
Parse the dicom stream (p. 340) and fill the data (p. 139) set with the read tags.
This function doesn’t parse the 128 bytes preamble and the DICM signature, which has
to be parsed by the calling function.
Parameters:
pStream The stream (p. 340) do decode
pDataSet A pointer to the data (p. 139) set to fill with the decoded tags
bExplicitDataType true if the stream (p. 340) is encoded with explicit data
(p. 139) type, false otherwise. Even when this parameter is set, the function
will automatically switch this parameter if a mismatch is detected during the
decoding procedure
endianType The stream’s endian type. Even when this parameter is set, the func-
tion will automatically switch this parameter if a mismatch is detected during
the decoding procedure
subItemLength the number of bytes to parse. If this parameter is set to 0xffffffff
then the function will stop parsing at the end of the sequence or at the end of
the file
maxSizeBufferLoad if a loaded buffer (p. 107) is exceedes the size in the param-
eter then it is not loaded immediatly but it will be loaded on demand. Some
codecs (p. 75) may ignore this parameter. Set to -1 to load all the buffers
immediatly
pReadSubItemLength a pointer to a imbxUint32 that the function will fill with
the number of bytes read
depth the current dataSet (p. 155) depth:
• 0 = root dataset
• >=1 = dataset embedded into another dataset. This value is used to
prevent a stack overflow
The documentation for this class was generated from the following files:
• dicomCodec.h
• dicomCodec.cpp
13.23 puntoexe::imebra::codecs::dicomCodecException
Class Reference
This is the base class for the exceptions thrown by the dicom codec (p. 117)
(dicomCodec (p. 131)).
#include <dicomCodec.h>
Inheritance diagram for puntoexe::imebra::codecs::dicomCodecException::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::dicomCodecException
puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached
This is the base class for the exceptions thrown by the dicom codec (p. 117)
(dicomCodec (p. 131)).
13.23.2.1 puntoexe::imebra::codecs::dicomCodecException::dicomCodecException
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dicomCodec.h
13.24 puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached
Class Reference
This exception is thrown when dicomCodec::parseStream (p. 132) reaches the maxi-
mum depth for embedded datasets.
#include <dicomCodec.h>
Inheritance diagram for puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::dicomCodecException
puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached
This exception is thrown when dicomCodec::parseStream (p. 132) reaches the maxi-
mum depth for embedded datasets.
13.24.2.1 puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached::dicomCodecExceptionDepthLimit
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dicomCodec.h
puntoexe::baseObject
puntoexe::imebra::codecs::codec
puntoexe::imebra::codecs::jpegCodec
• jpegCodec.h
• jpegCodec.cpp
13.26 puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax
Class Reference
Exception thrown when the jpeg variant cannot be handled.
#include <jpegCodec.h>
Inheritance diagram for puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::jpegCodecException
puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax
13.26.2.1 puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax::jpegCodecCannotHandleSyntax
(const std::string & message) [inline]
Parameters:
message the cause of the exception
The documentation for this class was generated from the following file:
• jpegCodec.h
13.27 puntoexe::imebra::codecs::jpegCodecException
Class Reference
Base class for the exceptions thrown by the jpeg codec (p. 117).
#include <jpegCodec.h>
Inheritance diagram for puntoexe::imebra::codecs::jpegCodecException::
puntoexe::imebra::codecs::codecException
puntoexe::imebra::codecs::jpegCodecException
puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax
Base class for the exceptions thrown by the jpeg codec (p. 117).
The documentation for this class was generated from the following file:
• jpegCodec.h
puntoexe::baseObject
puntoexe::imebra::data
Buffer deletion
• std::string getDataType ()
Get the tag’s buffer (p. 107) type in Dicom format.
Parameters:
pDataSet A pointer to the dataSet (p. 155) to store into the tag
Returns true if the specified buffer (p. 107) exists, otherwise it returns false.
The buffer (p. 107) can be created by requesting a writing handler (see han-
dlers::dataHandler (p. 195)).
Parameters:
bufferId the zero-based buffer’s id the function has to check for
Returns:
true if the buffer (p. 107) exists, false otherwise
Parameters:
bufferId the id of the buffer (p. 107) to be removed from the tag
Parameters:
bufferId the zero-based buffer’s id the function has to check for
Returns:
the buffer’s size in bytes, or 0 if the buffer (p. 107) doesn’t exist.
Get a data (p. 139) handler for the specified buffer (p. 107).
handlers::dataHandler (p. 195) can be used to read, write and resize the buffer
(p. 107).
handlers::dataHandler (p. 195) manages data (p. 139) types depending on the
buffer’s data (p. 139) type: if your application has to work directly on the buffer’s
Parameters:
bufferId the zero-based buffer’s id the data (p. 139) handler must use.
bWrite true if the application wants to write something into the buffer (p. 107)
defaultType a string that specifies the data (p. 139) type to use for the new buffers.
Returns:
a pointer to the data (p. 139) handler for the requested buffer (p. 107).
Get a raw data (p. 139) handler (handlers::dataHandlerRaw (p. 216)) for the speci-
fied buffer (p. 107).
The raw data (p. 139) handler can be used to read, write and resize the buffer (p. 107).
A raw data (p. 139) handler (handlers::dataHandlerRaw (p. 216)) always works on
a collection of bytes, no matter what the buffer’s data (p. 139) type is, while the nor-
mal handlers::dataHandler (p. 195) works on data (p. 139) types depending on the
buffer’s data (p. 139) type.
A handlers::dataHandler (p. 195) can be obtained by calling getDataHandler()
(p. 141).
Usually a tag has only one buffer (p. 107) (bufferId = 0), but when a tag is a sequence
or has an undefined length, then it could store more than one buffer (p. 107); in this
case your application has to specify the id of the buffer (p. 107) for which the data
(p. 139) handler is requested.
The application can also specify a data (p. 139) type to use when a buffer (p. 107)
doesn’t exist yet: in this case a buffer (p. 107) with the specified data (p. 139) type
will be allocated.
Parameters:
bufferId the zero-based buffer’s id the data (p. 139) handler must use.
bWrite true if the application wants to write something into the buffer (p. 107)
defaultType a string that specifies the data (p. 139) type to use for the new buffers.
Returns:
a pointer to the data (p. 139) handler for the requested buffer (p. 107).
Parameters:
dataSetId the ID of the dataSet (p. 155) to retrieve. Several data (p. 139) sets can
be embedded in the tag. The first dataSet’s ID is zero.
Returns:
a pointer to the retrieved dataSet (p. 155)
Returns:
the buffer’s data (p. 139) type in Dicom format
Parameters:
bufferId the id of the buffer (p. 107) for which the streamReader (p. 354) is re-
quired. This parameter is usually 0
Returns:
the streamReader (p. 354) connected to the buffer’s data (p. 139).
Parameters:
bufferId the id of the buffer (p. 107) for which the streamWriter (p. 359) is re-
quired. This parameter is usually 0
dataType the datatype used to create the buffer (p. 107) if it doesn’t exist already
Returns:
the streamWriter (p. 359) connected to the emptied buffer’s data (p. 139).
Parameters:
dataSetId The Id of the dataSet (p. 155) inside the tag. Tags can store several
data (p. 139) sets. The first dataSet (p. 155) has an ID of zero
pDataSet A pointer to the dataSet (p. 155) to store into the tag
The documentation for this class was generated from the following files:
• data.h
• data.cpp
puntoexe::baseObject
Return an iterator pointing to the first tag or group (data (p. 139) or dataGroup
(p. 150)) in the collection.
You can use this function to scan all the tags (data (p. 139)) in a dataGroup (p. 150)
or all the groups (dataGroup (p. 150)) in a dataSet (p. 155).
See dataCollectionIterator (p. 147) for more information.
Returns:
an iterator that accesses all the data in the collection
The documentation for this class was generated from the following file:
• dataCollection.h
puntoexe::baseObject
• bool reset ()
Reset the iterator so it referencesthe first data (p. 139) or dataGroup (p. 150) in the
collection.
• bool isValid ()
Returns true if the iterator references a valid data (p. 139) or dataGroup (p. 150) in
the collection.
• imbxUint16 getId ()
Return the id of the data (p. 139) or dataGroup (p. 150) referenced by the iterator.
• imbxUint16 getOrder ()
Retrieve the order of the referenced data (p. 139) or dataGroup (p. 150).
This class accesses to all the data stored in a dataCollection (p. 145) derived class
(dataGroup (p. 150) or dataSet (p. 155)).
When retrieved from a dataSet (p. 155) this class accesses all the groups (class data-
Group (p. 150)) in the dataSet (p. 155), while when retrieved from a dataGroup
(p. 150) it accesses all the tags (class data (p. 139)) in the dataGroup (p. 150).
When retrieved the iterator references the first data (p. 139) or dataGroup (p. 150) in
the collection.
Retrieve the data (p. 139) or dataGroup (p. 150) referenced by the iterator.
This function returns 0 if the iterator references an invalid data (p. 139) or dataGroup
(p. 150) (isValid() (p. 149) returns false).
Returns:
the data (p. 139) or dataGroup (p. 150) referenced by the iterator
Return the id of the data (p. 139) or dataGroup (p. 150) referenced by the iterator.
If the iterator references an invalid data (p. 139) or dataGroup (p. 150) (isValid()
(p. 149) returns false) then the function returns 0.
Returns:
the id of the referenced data (p. 139) or dataGroup (p. 150)
Retrieve the order of the referenced data (p. 139) or dataGroup (p. 150).
This function is used only while retrieving dataGroups because there can be several
groups with the same id; in this case the function retrieve the order of the dataGroup
(p. 150), that could be bigger than 0 when several data groups with the same id are
stored in the collection.
When used while retrieving the tags (class data (p. 139)) this function always returns
0.
The function returns 0 also when used while the iterator references an invalid data-
Group (p. 150) (isValid() (p. 149) returns 0).
Increase the iterator so it references the next data (p. 139) or dataGroup (p. 150) in
the collection.
Returns:
true if after the increment the iterator references a valid data (p. 139) or data-
Group (p. 150), or false if after the increment the iterator references the end of the
collection (invalid data (p. 139) or dataGroup (p. 150))
Returns true if the iterator references a valid data (p. 139) or dataGroup (p. 150) in
the collection.
Returns:
true if the iterator references a valid data (p. 139) or dataGroup (p. 150), or false
if the iterator references the end of the collection
Reset the iterator so it referencesthe first data (p. 139) or dataGroup (p. 150) in the
collection.
Returns:
true if after the reset the iterator references to a valid data (p. 139) or dataGroup
(p. 150), or false if after the reset the iterator references the end of the collection
(it means that the collection is empty)
The documentation for this class was generated from the following file:
• dataCollection.h
puntoexe::baseObject
puntoexe::imebra::dataGroup
The Dicom tags are organized into groups: this class stores all the tags that belong to
the same group.
Groups and tags (represented by the class data (p. 139)) are identified by an ID.
Get a handlers::dataHandler (p. 195) object for the requested tag’s buffer (p. 107).
A tag is represented by the class data (p. 139).
The data (p. 139) handler (handlers::dataHandler (p. 195)) allows the application to
read, write and resize the tag’s buffer (p. 107).
A tag can store several buffers: the application must specify the buffer’s id it wants to
deal with.
Parameters:
tagId the tag’s id, without the group’s id.
bufferId the buffer’s id (zero based). See data::getDataHandler() (p. 141) for
more informantion regarding this parameter
bWrite true if the application wants to write into the buffer (p. 107)
defaultType a string with the dicom data (p. 139) type to use if the buffer (p. 107)
doesn’t exist. If none is specified, then a default data (p. 139) type will be
used. This parameter is ignored if bWrite is set to false
Returns:
a pointer to the handlers::dataHandler (p. 195)
Get a handlers::dataHandlerRaw (p. 216) object for the requested tag’s buffer
(p. 107).
A raw data (p. 139) handler always sees the buffer (p. 107) as a collection of bytes, no
matter what its real data (p. 139) type is.
A tag is represented by the class data (p. 139).
The raw data (p. 139) handler (handlers::dataHandlerRaw (p. 216)) allows the ap-
plication to read, write and resize the tag’s buffer (p. 107). The data (p. 139) handler
works on a local copy of the data (p. 139) so the application doesn’t have to worry
about multithreading accesses to the buffer’s data (p. 139).
A tag can store several buffers: the application must specify the buffer’s id it wants to
deal with.
Parameters:
tagId the tag’s id, without the group’s id.
bufferId the buffer’s id (zero based). See data::getDataHandlerRaw() (p. 142)
for more informantion regarding this parameter
bWrite true if the application wants to write into the buffer (p. 107)
defaultType a string with the dicom data (p. 139) type to use if the buffer (p. 107)
doesn’t exist. If none is specified, then a default data (p. 139) type will be
used. This parameter is ignored if bWrite is set to false
Returns:
a pointer to the handlers::dataHandlerRaw (p. 216)
Return the data (p. 139) type of the specified tag, in dicom format.
A dicom data (p. 139) type is composed by 2 uppercase chars.
If the specified tag doesn’t exist, then the function returns an empty string.
Parameters:
tagId the tag’s id, without the group’s id
Returns:
the tag’s data (p. 139) type in dicom format, or an empty string if the tag doesn’t
exist in the group
Get a streamReader (p. 354) connected to the requested tag’s buffer (p. 107).
A tag is represented by the class data (p. 139).
The streamReader (p. 354) allows the application to read the data (p. 139) from the
tag’s buffer (p. 107). The stream (p. 340) works on a local copy of the data (p. 139)
so the application doesn’t have to worry about multithreading accesses to the buffer’s
data (p. 139).
A tag can store several buffers: the application must specify the buffer’s id it wants to
deal with.
Parameters:
tagId the tag’s id, without the group’s id.
bufferId the buffer’s id (zero based). See data::getDataHandler() (p. 141) for
more informantion regarding this parameter
Returns:
a pointer to the streamReader (p. 354)
Get a streamWriter (p. 359) connected to the requested tag’s buffer (p. 107).
A tag is represented by the class data (p. 139).
The streamWriter (p. 359) allows the application to write the data (p. 139) into the
tag’s buffer (p. 107). The stream (p. 340) works on a local copy of the data (p. 139)
so the application doesn’t have to worry about multithreading accesses to the buffer’s
data (p. 139).
A tag can store several buffers: the application must specify the buffer’s id it wants to
deal with.
Parameters:
tagId the tag’s id, without the group’s id.
bufferId the buffer’s id (zero based). See data::getDataHandler() (p. 141) for
more informantion regarding this parameter
dataType the datatype used to create the buffer (p. 107) if it doesn’t exist already
Returns:
a pointer to the streamWriter (p. 359)
Parameters:
tagId the tag’s id (without the group id).
bCreate if true and the tag doesn’t exist then a new tag will be created.
Returns:
a pointer to the tag object
The documentation for this class was generated from the following files:
• dataGroup.h
• dataGroup.cpp
puntoexe::baseObject
puntoexe::imebra::dataSet
• imbxUint32 getFirstAvailFrameBufferId ()
Return the first buffer’s id available where a new frame can be saved.
Data handlers
• void updateCharsetTag ()
Collect all the charsets used in the dataSet’s tags and then update the content of
the tag 0008,0005.
• void updateTagsCharset ()
Update all the dataSet’s tags with the charsets specified in the tag 0008,0005.
• imbxUint32 getItemOffset ()
Retrieve the offset at which the dataSet (p. 155) is located in the dicom stream
(p. 340).
A data (p. 139) set is a collection of groups of tags (see dataGroup (p. 150)).
The dataSet (p. 155) is usually built from a dicom stream (p. 340) by using the codec
codec::dicomCodec.
Also the tags with the data (p. 139) type SQ (sequence) contains one or more embedded
dataSets that can be retrieved by using data::getDataSet() (p. 143).
If your application creates a new dataset then it can set the default dataSet’s charset by
calling setCharsetsList(). See Imebra & Unicode (p. 41) for more information related
to Imebra and the Dicom charsets.
The dataSet (p. 155) and its components (all the dataGroup (p. 150), and data
(p. 139)) share a common lock object: this means that a lock on one of the dataSet’s
component will lock the entire dataSet (p. 155) and all its components.
For an introduction to the dataSet (p. 155), read Let’s read a dataSet (p. 30).
Return a data (p. 139) handler for the specified tag’s buffer (p. 107).
The data (p. 139) handler allows the application to read, write and resize the tag’s
buffer (p. 107).
A tag can store several buffers, then the application must specify the buffer’s id it wants
to deal with.
Parameters:
groupId the group to which the tag belongs
order if the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the tag belongs. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId the tag’s id
bufferId the buffer’s id (zero based)
bWrite true if the application wants to write into the buffer (p. 107)
defaultType a string with the dicom data (p. 139) type to use if the buffer (p. 107)
doesn’t exist. If none is specified, then a default data (p. 139) type will be
used
Returns:
a pointer to the data (p. 139) handler.
Return a raw data (p. 139) handler for the specified tag’s buffer (p. 107).
A raw data (p. 139) handler always sees the buffer (p. 107) as a collection of bytes, no
matter what the tag’s data (p. 139) type is.
A tag can store several buffers, then the application must specify the buffer’s id it wants
to deal with.
Parameters:
groupId the group to which the tag belongs
order if the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the tag belongs. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId the tag’s id
bufferId the buffer’s id (zero based)
bWrite true if the application wants to write into the buffer (p. 107)
defaultType a string with the dicom data (p. 139) type to use if the buffer (p. 107)
doesn’t exist. If none is specified, then a default data (p. 139) type will be
used
Returns:
a pointer to the data (p. 139) handler.
Parameters:
groupId The group to which the tag belongs
order When multiple groups with the same it are present, then use this parameter
to specify which group must be used. The first group as an order of 0.
tagId The id of the tag for which the type must be retrieved.
Returns:
a string with the tag’s type.
Return the default data (p. 139) type for the specified tag’s id.
The default data (p. 139) type is retrieved from an internal dictionary which stores the
default properties of each dicom’s tag.
Parameters:
groupId The group to which the tag belongs
tagId The id of the tag.
Returns:
the tag’s default type. The returned string is a constant.
Parameters:
groupId The group to which the tag to be read belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to retrieve
elementNumber The element’s number to retrieve. A buffer (p. 107) can store
several elements: this parameter specifies which element must be retrieved.
The first element’s number is 0
Returns:
The tag’s content, as a double
Return the first buffer’s id available where a new frame can be saved.
Returns:
the id of the first buffer (p. 107) available to store a new frame
Get the id of the buffer (p. 107) that starts at the specified offset.
Parameters:
offset one offset retrieved from the frames offset table: see getFrameOffset()
(p. 162)
pLengthToBuffer a pointer to a variable that will store the total lenght of the
buffers that preceed the one being returned (doesn’t include the tag descrip-
tors)
Returns:
the id of the buffer (p. 107) that starts at the specified offset
Retrieve the first and the last buffers used to store the image (p. 232).
This function works only with the new Dicom3 streams, not with the old NEMA for-
mat.
This function is used by setImage() (p. 169) and getImage() (p. 163).
Parameters:
frameNumber the frame for which the buffers have to be retrieved
pFirstBuffer a pointer to a variable that will contain the id of the first buffer
(p. 107) used to store the image (p. 232)
pEndBuffer a pointer to a variable that will contain the id of the first buffer
(p. 107) next to the last one used to store the image (p. 232)
Returns:
the total length of the buffers that contain the image (p. 232)
Parameters:
frameNumber the number of the frame for which the offset is requested
Returns:
the offset for the specified frame
Parameters:
groupId The group to retrieve.
order If the group is recurring in the file (it appears several times), then use this
parameter to specify which group must be retrieved. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero.
bCreate When bCreate is set to true and the requested group doesn’t exist, then a
new one is created and inserted into the dataset. When bCreate is set to false
and the requested group doesn’t exist, then a null pointer is returned.
Returns:
A pointer to the retrieved group. The group should be released as soon as possible
using the function Release(). If the requested group doesn’t exist then the returned
value depend on the value of the bCreate parameter: when bCreate is false then a
value of zero is returned, otherwise a pointer to the just created group is returned.
Parameters:
frameNumber The frame number to retrieve. The first frame’s id is 0
Returns:
A pointer to the retrieved image (p. 232)
Retrieve the offset at which the dataSet (p. 155) is located in the dicom stream (p. 340).
Returns:
the position at which the dataSet (p. 155) is located in the dicom stream (p. 340)
Retrieve a LUT.
LUT are encoded into sequences. This function retrieve the sequence and build a lut
(p. 241) object describing the LUT.
Parameters:
groupId The group to which the LUT sequence belongs
tagId The id of the tag to containing the LUT
lutId The id of the lut (p. 241) inside the tag (0 based)
Returns:
A pointer to the retrieved LUT. If the requested group, tag or buffer (p. 107) (se-
quence item) doesn’t exist, or if the tag’s type is not a sequence (SQ), then a null
pointer is returned, otherwise a pointer to the retrieved LUT is returned
Parameters:
groupId The group to which the sequence tag to be parsed belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify which group must be retrieved. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to parse
bufferId The id of the tag’s item to parse (zero based)
Returns:
A pointer to the retrieved data (p. 139) set. If the requested group, tag or buffer
(p. 107) (sequence item) doesn’t exist, or if the tag’s type is not a sequence (SQ),
then a null pointer is returned, otherwise a pointer to the retrieved dataset is re-
turned
Read the value of the requested tag and return it as a signed long.
Parameters:
groupId The group to which the tag to be read belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to retrieve
elementNumber The element’s number to retrieve. A buffer (p. 107) can store
several elements: this parameter specifies which element must be retrieved.
The first element’s number is 0
Returns:
The tag’s content, as a signed long
Return a streamReader (p. 354) connected to the specified tag’s buffer’s memory
(p. 328).
A tag can store several buffers: the application must specify the buffer’s id it wants to
deal with.
Parameters:
groupId the group to which the tag belongs
order if the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the tag belongs. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId the tag’s id
bufferId the buffer’s id (zero based)
Returns:
a pointer to the streamReader (p. 354)
Return a streamWriter (p. 359) connected to the specified tag’s buffer’s memory
(p. 328).
A tag can store several buffers, then the application must specify the buffer’s id it wants
to deal with.
Parameters:
groupId the group to which the tag belongs
order if the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the tag belongs. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId the tag’s id
bufferId the buffer’s id (zero based)
dataType the datatype used to create the buffer (p. 107) if it doesn’t exist already
Returns:
a pointer to the streamWriter (p. 359)
Retrieve a tag’s value as a string. getUnicodeString() (p. 167) is preferred over this
method.
Read the value of the requested tag and return it as a string.
Parameters:
groupId The group to which the tag to be read belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to retrieve
elementNumber The element’s number to retrieve. A buffer (p. 107) can store
several elements: this parameter specifies which element must be retrieved.
The first element’s number is 0
Returns:
The tag’s content, as a string
Parameters:
groupId The group to which the tag belongs.
order If the group is recurring in the file (it appears several times), then use this
parameter to specify which group must be retrieved. This parameter is used
to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero.
tagId The id of the tag to retrieve.
bCreate When bCreate is set to true and the requested tag doesn’t exist, then a
new one is created and inserted into the dataset. When bCreate is set to false
and the requested tag doesn’t exist, then a null pointer is returned.
Returns:
A pointer to the retrieved tag. If the requested tag doesn’t exist then the returned
value depend on the value of the bCreate parameter: when bCreate is false then a
value of zero is returned, otherwise a pointer to the just created tag is returned.
Parameters:
groupId The group to which the tag to be read belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to retrieve
elementNumber The element’s number to retrieve. A buffer (p. 107) can store
several elements: this parameter specifies which element must be retrieved.
The first element’s number is 0
Returns:
The tag’s content, as an unicode string
Parameters:
groupId The group to which the tag to be read belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to retrieve
elementNumber The element’s number to retrieve. A buffer (p. 107) can store
several elements: this parameter specifies which element must be retrieved.
The first element’s number is 0
Returns:
The tag’s content, as an unsigned long
Parameters:
waveformId the zero based index of the waveform (p. 319) to retrieve
Returns:
an object waveform (p. 319) that can be used to read the waveform (p. 319) data
(p. 139), or a null pointer if the requested waveform (p. 319) doesn’t exist
Parameters:
groupId The group to which the tag to be write belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to set
elementNumber The element’s number to set. A buffer (p. 107) can store sev-
eral elements: this parameter specifies which element must be set. The first
element’s number is 0
newValue the value to be written into the tag
defaultType if the specified tag doesn’t exist then the function will create a new
tag with the data (p. 139) type specified in this parameter
Parameters:
groupId The id of the group to insert into the data (p. 139) set.
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero.
pGroup A pointer to the group to insert into the data (p. 139) set.
Insert an image (p. 232) into the data (p. 139) set.
The specified transfer syntax will be used to choose the right codec for the image
(p. 232).
Parameters:
frameNumber The frame number where the image (p. 232) must be stored. The
first frame’s id is 0.
pImage A pointer to the image (p. 232) object to be stored into the data (p. 139)
set.
transferSyntax the transfer syntax that specifies the codec and the parameters to
use for the encoding
quality an enumeration that set the compression quality
Called by codecs::dicomCodec (p. 131) when the dataset is written into a stream
(p. 340). Tells the dataSet (p. 155) the position at which it has been written into the
stream (p. 340).
Parameters:
offset the position at which the dataSet (p. 155) has been written into the stream
(p. 340)
Parameters:
groupId The group to which the tag to be write belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to set
elementNumber The element’s number to set. A buffer (p. 107) can store sev-
eral elements: this parameter specifies which element must be set. The first
element’s number is 0
newValue the value to be written into the tag
defaultType if the specified tag doesn’t exist then the function will create a new
tag with the data (p. 139) type specified in this parameter
Set a tag’s value as a string. setUnicodeString() (p. 171) is preferred over this method.
If the specified tag doesn’t exist, then a new one will be created and inserted into the
dataset.
Parameters:
groupId The group to which the tag to be write belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to set
elementNumber The element’s number to set. A buffer (p. 107) can store sev-
eral elements: this parameter specifies which element must be set. The first
element’s number is 0
newString the value to be written into the tag
defaultType if the specified tag doesn’t exist then the function will create a new
tag with the data (p. 139) type specified in this parameter
Parameters:
groupId The group to which the tag to be write belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to set
elementNumber The element’s number to set. A buffer (p. 107) can store sev-
eral elements: this parameter specifies which element must be set. The first
element’s number is 0
newString the value to be written into the tag
defaultType if the specified tag doesn’t exist then the function will create a new
tag with the data (p. 139) type specified in this parameter
Parameters:
groupId The group to which the tag to be write belongs
order If the group is recurring in the file (it appears several times), then use this
parameter to specify to which group the group belongs. This parameter is
used to deal with old DICOM files, since the new one should use the sequence
items to achieve the same result. It should be set to zero
tagId The id of the tag to set
elementNumber The element’s number to set. A buffer (p. 107) can store sev-
eral elements: this parameter specifies which element must be set. The first
element’s number is 0
newValue the value to be written into the tag
defaultType if the specified tag doesn’t exist then the function will create a new
tag with the data (p. 139) type specified in this parameter
Collect all the charsets used in the dataSet’s tags and then update the content of the tag
0008,0005.
This function is called by the codecs (p. 75) before the dicom stream (p. 340) is saved,
therefore the application doesn’t need to call the function before saving the stream
(p. 340).
Update all the dataSet’s tags with the charsets specified in the tag 0008,0005.
This function is called by the codecs (p. 75) after the stream (p. 340) has been loaded,
therefore the application doesn’t need to call the function after the stream (p. 340) has
been loaded.
The documentation for this class was generated from the following files:
• dataSet.h
• dataSet.cpp
13.33 puntoexe::imebra::dataSetCorruptedOffsetTable
Class Reference
This exception is thrown when the basic offset table is corrupted.
#include <dataSet.h>
Inheritance diagram for puntoexe::imebra::dataSetCorruptedOffsetTable::
puntoexe::imebra::dataSetException
puntoexe::imebra::dataSetCorruptedOffsetTable
13.33.2.1 puntoexe::imebra::dataSetCorruptedOffsetTable::dataSetCorruptedOffsetTable
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dataSet.h
puntoexe::imebra::dataSetException
This is the base class for the exceptions thrown by the dataSet (p. 155).
The documentation for this class was generated from the following file:
• dataSet.h
13.35 puntoexe::imebra::dataSetExceptionDifferentFormat
Class Reference
This exception is thrown when the application is trying to store an image (p. 232) in the
dataSet (p. 155) but the dataSet (p. 155) already stores other images that have different
attributes.
#include <dataSet.h>
Inheritance diagram for puntoexe::imebra::dataSetExceptionDifferentFormat::
puntoexe::imebra::dataSetException
puntoexe::imebra::dataSetExceptionDifferentFormat
This exception is thrown when the application is trying to store an image (p. 232) in the
dataSet (p. 155) but the dataSet (p. 155) already stores other images that have different
attributes.
The exception is usually thrown by dataSet::setImage() (p. 169).
The documentation for this class was generated from the following file:
• dataSet.h
13.36 puntoexe::imebra::dataSetExceptionOldFormat
Class Reference
This exception is thrown when the application is trying to store an image (p. 232) in an
old Dicom format.
#include <dataSet.h>
Inheritance diagram for puntoexe::imebra::dataSetExceptionOldFormat::
puntoexe::imebra::dataSetException
puntoexe::imebra::dataSetExceptionOldFormat
This exception is thrown when the application is trying to store an image (p. 232) in an
old Dicom format.
The application cannot store images in old Dicom formats (before Dicom3).
The documentation for this class was generated from the following file:
• dataSet.h
13.37 puntoexe::imebra::dataSetExceptionUnknownTransferSyntax
Class Reference
This exception is thrown when an unknown transfer syntax is being used while reading
or writing a stream (p. 340).
#include <dataSet.h>
Inheritance diagram for puntoexe::imebra::dataSetExceptionUnknownTransferSyntax::
puntoexe::imebra::dataSetException
puntoexe::imebra::dataSetExceptionUnknownTransferSyntax
This exception is thrown when an unknown transfer syntax is being used while reading
or writing a stream (p. 340).
The documentation for this class was generated from the following file:
• dataSet.h
13.38 puntoexe::imebra::dataSetExceptionWrongFrame
Class Reference
This exception is thrown when the application is storing several images in the dataSet
(p. 155) but doesn’t store them in the right order.
#include <dataSet.h>
Inheritance diagram for puntoexe::imebra::dataSetExceptionWrongFrame::
puntoexe::imebra::dataSetException
puntoexe::imebra::dataSetExceptionWrongFrame
This exception is thrown when the application is storing several images in the dataSet
(p. 155) but doesn’t store them in the right order.
The application must store the images following the frame order, without skipping
frames.
The documentation for this class was generated from the following file:
• dataSet.h
13.39 puntoexe::imebra::dataSetImageDoesntExist
Class Reference
This exception is thrown when the an image (p. 232) that doesn’t exist is requested.
#include <dataSet.h>
Inheritance diagram for puntoexe::imebra::dataSetImageDoesntExist::
puntoexe::imebra::dataSetException
puntoexe::imebra::dataSetImageDoesntExist
This exception is thrown when the an image (p. 232) that doesn’t exist is requested.
Examples:
dicom2jpeg/dicom2jpeg.cpp.
13.39.2.1 puntoexe::imebra::dataSetImageDoesntExist::dataSetImageDoesntExist
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dataSet.h
Returns:
a pointer to the dicom dictionary
Return true if the tag’s length in the dicom stream (p. 340) must be written using a
DWORD.
Parameters:
dataType the data (p. 139) type for which the information is required
Returns:
true if the specified data (p. 139) type’s length must be written using a DWORD
Return the maximum size of the tags with the specified data (p. 139) type.
Parameters:
dataType the data (p. 139) type for which the information is required
Returns:
the maximum tag’s size in bytes
Parameters:
groupId The group which the tag belongs to
Returns:
The tag’s description
Parameters:
groupId The group which the tag belongs to
tagId The tag’s id
Returns:
The tag’s data (p. 139) type
Parameters:
dataType the data (p. 139) type for which the information is required
Returns:
the size of a single element
Return true if the specified string represents a valid dicom data (p. 139) type.
Parameters:
dataType the string to be checked
Returns:
true if the specified string is a valid dicom data (p. 139) type
The documentation for this class was generated from the following files:
• dicomDict.h
• dicomDict.cpp
puntoexe::baseObject
puntoexe::imebra::dicomDir
A dicomDir (p. 183) object contains the information about the tree structure of a DI-
COMDIR dataset.
The dicomDir (p. 183) class parses the DICOMDIR dataset in the constructor and
detects DICOMDIR tree structure the specified.
Each directory record in the DICOMDIR structure is represented by the directo-
ryRecord (p. 190) class.
The first root directoryRecord (p. 190) can be obtained with a call to getFirst-
RootRecord() (p. 185).
WARNING: all the directoryRecord (p. 190) allocated by this class are released only
when the dicomDir (p. 183) itself is released, even if the directoryRecord (p. 190) are
explicitly released by your application.
This resolves a stack overflow when a large number of sibling records is present.
Examples:
dicomdirItems/dicomdirItems.cpp.
Parameters:
pDataSet the dataSet (p. 155) that contains or will contain the DICOMDIR struc-
ture. If a null pointer is passed, then a new dataSet (p. 155) is created by this
constructor
Updates the dataSet (p. 155) containing the DICOMDIR with the information con-
tained in the directory records.
Before building the DICOMDIR dataSet (p. 155) remember to set the following val-
ues in the dataSet (p. 155) (call getDirectoryDataSet() (p. 185) to get the dataSet
(p. 155)):
Please note that if any data (p. 139) is added to the directory or any of the directoryItem
objects after a call to buildDataSet() (p. 184) then the dataset has to be rebuilt once
more with another call to buildDataSet() (p. 184).
buildDataSet() (p. 184) doesn’t return a new dataSet (p. 155) but modifies the dataSet
(p. 155) specified in the constructor.
Returns:
a pointer to the updated dataSet (p. 155)
Returns:
the first root record in the DICOMDIR.
Creates a new directoryRecord (p. 190) and embeds its dataSet (p. 155) into the DI-
COMDIR sequence of items.
Once the new directoryRecord (p. 190) has been returned, the calling ap-
plication should set the proper record’s values and specify the relation-
ship with other items by calling setFirstRootRecord() (p. 185) or directo-
ryRecord::setNextRecord() (p. 193) or directoryRecord::setFirstChildRecord()
(p. 193) or directoryRecord::setReferencedRecord() (p. 193).
Returns:
a new directoryRecord (p. 190) object belonging to the DICOMDIR
Parameters:
pFirstRootRecord a directoryRecord (p. 190) obtained with a call to get-
NewRecord() (p. 185). The directoryRecord (p. 190) will be the first root
record in the directory
The documentation for this class was generated from the following files:
• dicomDir.h
• dicomDir.cpp
13.42 puntoexe::imebra::dicomDirCircularReferenceException
Class Reference
This exception is thrown when a call to dicomDir::setFirstRootRecord()
(p. 185) or directoryRecord::setNextRecord() (p. 193) or di-
rectoryRecord::setFirstChildRecord() (p. 193) or directo-
ryRecord::setReferencedRecord() (p. 193) causes a circular reference between
directoryRecord (p. 190) objects.
#include <dicomDir.h>
Inheritance diagram for puntoexe::imebra::dicomDirCircularReferenceException::
puntoexe::imebra::dicomDirException
puntoexe::imebra::dicomDirCircularReferenceException
13.42.2.1 puntoexe::imebra::dicomDirCircularReferenceException::dicomDirCircularReferenceException
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dicomDir.h
puntoexe::imebra::dicomDirException
puntoexe::imebra::dicomDirCircularReferenceException puntoexe::imebra::dicomDirUnknownDirectoryRecordType
Base class from which the exceptions thrown by directoryRecord (p. 190) and di-
comDir (p. 183) derive.
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dicomDir.h
13.44 puntoexe::imebra::dicomDirUnknownDirectoryRecordType
Class Reference
Exception thrown when an unknown record type is detected in directo-
ryRecord::getType() (p. 193), directoryRecord::getTypeString() (p. 193), directo-
ryRecord::setType() (p. 194) or directoryRecord::setTypeString() (p. 194).
#include <dicomDir.h>
Inheritance diagram for puntoexe::imebra::dicomDirUnknownDirectoryRecordType::
puntoexe::imebra::dicomDirException
puntoexe::imebra::dicomDirUnknownDirectoryRecordType
13.44.2.1 puntoexe::imebra::dicomDirUnknownDirectoryRecordType::dicomDirUnknownDirectoryRecordType
(const std::string & message) [inline]
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• dicomDir.h
puntoexe::baseObject
puntoexe::imebra::directoryRecord
Public Types
• enum tDirectoryRecordType
Specifies the item’s type.
• tDirectoryRecordType getType ()
Returns the record’s type.
• std::wstring getTypeString ()
Returns a string representing the record’s type.
Parameters:
part the part to be returned, 0 based.
Returns:
the part’s name (folder or file), or an empty string if the requested part doesn’t exist
Returns:
the first child record, or 0 if the record doesn’t have any child
Returns:
the next sibling record, or 0 if this is the last record
Returns the dataSet (p. 155) that contains the record’s information.
The record’s dataSet (p. 155) is embedded in a sequence in the DICOMDIR dataset.
Returns:
the dataSet (p. 155) that contains the record’s information
Returns:
the referenced record, or 0 if the record doesn’t reference any other record
13.45.3.6 directoryRecord::tDirectoryRecordType
puntoexe::imebra::directoryRecord::getType ()
Returns:
the record’s type
Returns:
the record’s type
Parameters:
pFirstChildRecord the first child record
Parameters:
pNextRecord the next sibling record
Parameters:
pReferencedRecord the referenced record
Parameters:
recordType the record’s type
Parameters:
recordType the string representing the record’s type
The documentation for this class was generated from the following files:
• dicomDir.h
• dicomDir.cpp
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerRaw puntoexe::imebra::handlers::dataHandlerDateTimeBase
puntoexe::imebra::handlers::dataHandlerStringAE
puntoexe::imebra::handlers::dataHandlerStringAS
puntoexe::imebra::handlers::dataHandlerStringCS
puntoexe::imebra::handlers::dataHandlerStringDS
puntoexe::imebra::handlers::dataHandlerStringIS
puntoexe::imebra::handlers::dataHandlerStringUnicode
• void commit ()
Finalize the copy of the data (p. 139) from the handler to the buffer (p. 107).
• void abort ()
Discard all the changes made on a writing handler.
Data pointer
The following functions set the value of the internal pointer that references the data
element read/written by the reading/writing functions.
• virtual void setPointer (const imbxUint32 elementNumber)=0
Move the internal pointer to the required. data (p. 139) element.
Attributes
Reading/writing functions
• virtual void setDate (imbxInt32 year, imbxInt32 month, imbxInt32 day, im-
bxInt32 hour, imbxInt32 minutes, imbxInt32 seconds, imbxInt32 nanosec-
onds, imbxInt32 offsetHours, imbxInt32 offsetMinutes)
Set the active data element as a date.
Copy the content of the buffer controlled by the handler into an array of imbxInt32
values.
Friends
• class puntoexe::imebra::buffer
• class puntoexe::imebra::transaction
This is the base class for all the imebra (p. 71) data (p. 139) handlers (p. 77).
A data (p. 139) handler allows to read/write the data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) object without worrying about the data format.
Data handlers (p. 77) work on a local copy of the buffer (p. 107), then they don’t need
to worry about multithreading accesses.
Also, once a dataHandler (p. 195) has been obtained from a buffer (p. 107), it cannot
be shared between threads and it doesn’t provide any multithread-safe mechanism,
except for its destructor which copies the local buffer (p. 107) back to the original one
(only for the writable handlers (p. 77)).
Data handlers (p. 77) are also used to access to the decompressed image’s pixels (see
image (p. 232) and handlers::imageHandler (p. 78)).
To obtain a data (p. 139) handler your application has to call
buffer::getDataHandler() (p. 110) or image::getDataHandler() (p. 235).
Finalize the copy of the data (p. 139) from the handler to the buffer (p. 107).
Is not necessary to call this function directly because it is called by the handler’s de-
structor, which copy any modification back to the buffer (p. 107) and then finalize it.
In a writing handler copies back the modified data (p. 139) to the buffer (p. 107).
Is not necessary to call this function directly because it is called by the handler’s de-
structor, which copy any modification back to the buffer (p. 107) and finalize it.
The operation must be finalized by a call to commit() (p. 198), or will be finalized by
the destructor unless a call to abort() (p. 198) happen.
Copy the content of an array of imbxInt32 values into the buffer controlled by the
handler.
The function doesn’t resize the handler’s memory before copying the values. If the size
of the source buffer (p. 107) is too big, then a partial copy will be performed.
Parameters:
pSource the pointer to the array of imbxInt32 values.
length the number of imbxInt32 values that must be copied from pSource into the
buffer (p. 107) controlled by the handler.
Copy the content of the buffer controlled by the handler into an array of imbxInt32
values.
Parameters:
pDest the pointer to the destination array of imbxInt32 values
length the number of imbxInt32 values to copy into the destination array
Get the dicom data (p. 139) type managed by this handler.
The dicom data (p. 139) type is formed by 2 uppercase chars, as described by the dicom
standard. See buffer (p. 107) for further information.
Returns:
the data (p. 139) handler’s dicom data (p. 139) type
Parameters:
pYear a pointer to a value that will be filled with the UTC date’s year
pMonth a pointer to a value that will be filled with the UTC date’s month
pDay a pointer to a value that will be filled with the UTC date’s day of the month
pHour a pointer to a value that will be filled with the UTC hour
pMinutes a pointer to a value that will be filled with the UTC minutes
pSeconds a pointer to a value that will be filled with the UTC seconds
pNanoseconds a pointer to a value that will be filled with the UTC nanosecods
pOffsetHours a pointer to a value that will be filled with the difference between
the date time zone and the UTC time zone
pOffsetMinutes a pointer to a value that will be filled with the difference between
the date time zone and the UTC time zone
Returns:
the value of the active data (p. 139) element transformed into a double
Retrieve the active data element as a double and increase the data handler’s internal
pointer by 1.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Returns:
the value of the active data (p. 139) element transformed into a double
Return the byte that this handler uses to fill its content to make its size even.
Returns:
the byte used to make the content’s size even
Returns:
the value of the active data (p. 139) element transformed into a signed long
Retrieve the active data element as a signed long and increase the data handler’s internal
pointer by 1.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Returns:
the value of the active data (p. 139) element transformed into a signed long
Retrieve the data (p. 139) handler’s local buffer (p. 107) buffer (p. 107) size (in ele-
ments).
Returns:
the buffer’s size in elements
Returns:
the value of the active data (p. 139) element transformed into a string.
Returns:
the value of the active data (p. 139) element transformed into a string.
Returns:
the element’s size in bytes, or zero if the element doesn’t have a fixed size
Returns:
the value of the active data (p. 139) element transformed into an unsigned long
Retrieve the active data element as an unsigned long and increase the data handler’s
internal pointer by 1.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Returns:
the value of the active data (p. 139) element transformed into an unsigned long
Returns true if the data (p. 139) handler’s internal pointer is valid.
The internal pointer references the element that will be read/written by the reading/writ-
ing functions.
If the internal pointer is out of the valid range, then this method returns false.
See also setPointer() (p. 205), incPointer and skip() (p. 207).
Returns:
the internal pointer’s status (true=valid, false=invalid).
Parameters:
year the UTC date’s year
month the UTC date’s month
day the UTC date’s day of the month
hour the UTC hour
minutes the UTC minutes
seconds the UTC seconds
nanoseconds the UTC nanosecods
offsetHours the difference between the date time zone and the UTC time zone
offsetMinutes the difference between the date time zone and the UTC time zone
Parameters:
value the value to write into the active data element.
Set the active data element from a double and increase the data (p. 139) handler’s
internal pointer by one element.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Parameters:
value the value to write into the active data element.
Move the internal pointer to the required. data (p. 139) element.
Subsequent calls to the reading/writing functions will read/write the element specified
by using this function.
Note that the pointer is in "data elements", not in bytes. See also incPointer() (p. 203)
and skip() (p. 207).
Parameters:
elementNumber The element number to activate.
Parameters:
value the value to write into the active data element.
Set the active data element from a signed long and increase the data (p. 139) handler’s
internal pointer by one element.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Parameters:
value the value to write into the active data element.
Parameters:
elementsNumber the requested buffer’s size, in data (p. 139) elements
Set the active data element from a string. SetUnicodeString() is preferred over set-
String() (p. 206).
The active data element is referenced by the data handler’s internal pointer, set by the
method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Parameters:
value the value to write into the active data element.
Parameters:
value the value to write into the active data element.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Parameters:
value the value to write into the active data element.
Set the active data element from an unsigned long and increase the data (p. 139) han-
dler’s internal pointer by one element.
The active data element is referenced by the data (p. 139) handler’s internal pointer,
set by the method setPointer() (p. 205), incPointer() (p. 203) and skip() (p. 207).
Parameters:
value the value to write into the active data element.
Increase the data (p. 139) handler’s internal pointer by the specified number of ele-
ments.
The internal pointer references the element that will be read/written by the reading/writ-
ing functions.
See also setPointer() (p. 205) and incPointer() (p. 203).
Parameters:
skip the number of element the to add to the current value of the data (p. 139)
handler’s internal pointer
The documentation for this class was generated from the following files:
• dataHandler.h
• dataHandler.cpp
13.47 puntoexe::imebra::handlers::dataHandlerDate
Class Reference
This data handler is returned by the class buffer (p. 107) when the application wants to
deal with a dicom tag of type "DA" (date).
#include <dataHandlerDate.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerDate::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerDateTimeBase
puntoexe::imebra::handlers::dataHandlerDate
This data handler is returned by the class buffer (p. 107) when the application wants to
deal with a dicom tag of type "DA" (date).
Return a string representing the date stored in the buffer (p. 107).
The returned string has the format: "YYYY-MM-DD" where:
• DD is the day
Returns:
a string representing the date stored in the buffer (p. 107)
• DD is the day
Parameters:
value the string representing the date to be set
• dataHandlerDate.h
• dataHandlerDate.cpp
13.48 puntoexe::imebra::handlers::dataHandlerDateTimeBase
Class Reference
This class is used as base class by the handlers (p. 77) that manage the date and the
time.
#include <dataHandlerDateTimeBase.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerDateTimeBase::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerDateTimeBase
puntoexe::imebra::handlers::dataHandlerDate puntoexe::imebra::handlers::dataHandlerTime
This class is used as base class by the handlers (p. 77) that manage the date and the
time.
This class supplies the methods setSignedLong(), setUnsignedLong(), setDouble(),
getSignedLong(), getUnsignedLong(), getDouble(). Those methods work with time_t
structure
The documentation for this class was generated from the following files:
• dataHandlerDateTimeBase.h
• dataHandlerDateTimeBase.cpp
13.49 puntoexe::imebra::handlers::dataHandlerNumeric<
dataHandlerType > Class Template Reference
This data (p. 139) handler accesses to the numeric data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) class.
#include <dataHandlerNumeric.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerNumeric< dataHan-
dlerType >::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
This data (p. 139) handler accesses to the numeric data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) class.
A special definition of this class (puntoexe::imebra::handlers::imageHandler
(p. 78)) is used to access to the images’ raw pixels.
Provides a direct access to the data (p. 139) managed by the handler.
Parameters:
nSubscript the index of the numeric value that you want to access to
Returns:
a reference to the requested value
Copy the content of an array of imbxInt32 values into the buffer (p. 107) controlled by
the handler, considering that the source buffer (p. 107) could have subsampled data
(p. 139).
The source buffer (p. 107) is supposed to have the information related to a single chan-
nel.
Copy the buffer (p. 107) controlled by the handler into an array of imbxInt32 values,
considering that the destination buffer (p. 107) could be subsampled.
The destination buffer (p. 107) is supposed to have the information related to a single
channel.
Parameters:
pDest a pointer to the destination array of imbxInt32 values
destSubSampleX the horizontal subsamplig factor of the destination buffer
(p. 107) (1=not subsampled, 2=subsampled)
destSubSampleY the vertical subsamplig factor of the destination buffer (p. 107)
(1=not subsampled, 2=subsampled)
sourceStartCol the horizontal coordinate of the top left corner of the source rect-
angle
sourceStartRow the vertical coordinate of the top left corner of the source rectan-
gle
sourceEndCol the horizontal coordinate of the bottom right corner of the source
rectangle
sourceEndRow the vertical coordinate of the bottom right corner of the source
rectangle
sourceStartChannel the source channel to be copied
sourceWidth the source buffer’s width in pixels
sourceHeight the source buffer’s height in pixels
sourceNumChannels the number of channels in the source buffer (p. 107)
Return the memory (p. 328) object that stores the data (p. 139) managed by the han-
dler.
Returns:
the memory (p. 328) object that stores the data (p. 139) managed by the handler
Returns a pointer to the physical memory that stores the data (p. 139) managed by the
handler.
Warning: the memory that stores the managed data (p. 139) may be reallocated by a
call to setSize().
Returns:
a pointer to the physical memory that stores the data (p. 139) managed by the
handler
Provides a direct access to the data (p. 139) managed by the handler.
Parameters:
nSubscript the index of the numeric value that you want to access to
The documentation for this class was generated from the following file:
• dataHandlerNumeric.h
13.50 puntoexe::imebra::handlers::dataHandlerRaw
Class Reference
A dataHandlerRaw (p. 216) always "sees" the data (p. 139) as a collection of bytes,
no matter what the Dicom data (p. 139) type is.
#include <dataHandlerNumeric.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerRaw::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerRaw
A dataHandlerRaw (p. 216) always "sees" the data (p. 139) as a collection of bytes,
no matter what the Dicom data (p. 139) type is.
The documentation for this class was generated from the following file:
• dataHandlerNumeric.h
13.51 puntoexe::imebra::handlers::dataHandlerString
Class Reference
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings.
#include <dataHandlerString.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerString::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings.
The documentation for this class was generated from the following files:
• dataHandlerString.h
• dataHandlerString.cpp
13.52 puntoexe::imebra::handlers::dataHandlerStringAE
Class Reference
Handles the Dicom data (p. 139) type "AE" (application entity.
#include <dataHandlerStringAE.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringAE::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringAE
Handles the Dicom data (p. 139) type "AE" (application entity.
The documentation for this class was generated from the following files:
• dataHandlerStringAE.h
• dataHandlerStringAE.cpp
13.53 puntoexe::imebra::handlers::dataHandlerStringAS
Class Reference
Handles the Dicom data (p. 139) type "AS" (age string).
#include <dataHandlerStringAS.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringAS::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringAS
Public Types
• enum tAgeUnit { days = L’D’, weeks = L’W’, months = L’M’, years = L’Y’
}
Used by setAge() (p. 222) and getAge() (p. 220) to specify the unit of the age value.
Handles the Dicom data (p. 139) type "AS" (age string).
The handler supplies two additional functions designed to set/get the age (setAge()
(p. 222) and getAge() (p. 220)) and overwrite the functions getSignedLong() (p. 221),
getUnsignedLong() (p. 221), getDouble() (p. 221), setSignedLong() (p. 222), setUn-
signedLong() (p. 222), setDouble() (p. 222) to make them work with the years.
setDouble() (p. 222) and getDouble() (p. 221) work also with fraction of a year, setting
the age unit correctly (days, weeks, months or years).
Used by setAge() (p. 222) and getAge() (p. 220) to specify the unit of the age value.
Enumerator:
days the age value is in days
weeks the age value is in weeks
months the age value is in months
years the age value is in years
Retrieve the age value and its unit from the buffer (p. 107) handled by this handler.
Parameters:
pUnit a pointer to a tAgeUnit that will be filled with the unit information related
to the returned value
Returns:
the age, expressed in the unit written in the location referenced by the parameter
pUnit
Returns:
the age contained in the buffer (p. 107) converted into years
Returns:
the age contained in the buffer (p. 107) converted into years
Returns:
the age contained in the buffer (p. 107) converted into years
Set the value of the age string and specify its unit.
Parameters:
age the age to be written in the buffer (p. 107)
unit the units used for the parameter age
Write the specified age into the handled buffer (p. 107).
If a fraction of a year is specified, then the function set the age in days, weeks or months
according to the value of the fraction.
Parameters:
value the age to be written, in years
Write the specified age into the handled buffer (p. 107).
Parameters:
value the age to be written, in years
Write the specified age into the handled buffer (p. 107).
Parameters:
value the age to be written, in years
• dataHandlerStringAS.h
• dataHandlerStringAS.cpp
13.54 puntoexe::imebra::handlers::dataHandlerStringCS
Class Reference
Handles the Dicom data (p. 139) type "CS" (code string).
#include <dataHandlerStringCS.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringCS::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringCS
Handles the Dicom data (p. 139) type "CS" (code string).
The documentation for this class was generated from the following files:
• dataHandlerStringCS.h
• dataHandlerStringCS.cpp
13.55 puntoexe::imebra::handlers::dataHandlerStringDS
Class Reference
Handles the Dicom type "DS" (decimal string).
#include <dataHandlerStringDS.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringDS::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringDS
• dataHandlerStringDS.h
• dataHandlerStringDS.cpp
13.56 puntoexe::imebra::handlers::dataHandlerStringIS
Class Reference
Handles the Dicom type "IS" (integer string).
#include <dataHandlerStringIS.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringIS::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringIS
• dataHandlerStringIS.h
• dataHandlerStringIS.cpp
13.57 puntoexe::imebra::handlers::dataHandlerStringPN
Class Reference
Handles the Dicom type "PN" (person name).
#include <dataHandlerStringPN.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringPN::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringUnicode
puntoexe::imebra::handlers::dataHandlerStringPN
Inside a components group, the name components (first name, middle name, surname,
etc) must be separated by a ∧ .
This class doesn’t insert or parse the ∧ separator which must be inserted and handled
by the calling application, but handles the = separator which separates the components
groups.
This means that to read or set all the patient name you have to move the pointer to the
internal element by using setPointer(), incPointer() or skip() (p. 207).
For instance, to set the name "Left∧ Arrow" both with a character and an ideographic
representation you have to use the following code:
The documentation for this class was generated from the following files:
• dataHandlerStringPN.h
• dataHandlerStringPN.cpp
13.58 puntoexe::imebra::handlers::dataHandlerStringUnicode
Class Reference
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings that
need to be converted from different unicode charsets.
#include <dataHandlerStringUnicode.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerStringUnicode::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerStringUnicode
puntoexe::imebra::handlers::dataHandlerStringPN
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings that
need to be converted from different unicode charsets.
The documentation for this class was generated from the following files:
• dataHandlerStringUnicode.h
• dataHandlerStringUnicode.cpp
13.59 puntoexe::imebra::handlers::dataHandlerTime
Class Reference
This data handler is returned by the class buffer (p. 107) when the application wants to
deal with a dicom tag of type "TM" (time).
#include <dataHandlerTime.h>
Inheritance diagram for puntoexe::imebra::handlers::dataHandlerTime::
puntoexe::baseObject
puntoexe::imebra::handlers::dataHandler
puntoexe::imebra::handlers::dataHandlerString
puntoexe::imebra::handlers::dataHandlerDateTimeBase
puntoexe::imebra::handlers::dataHandlerTime
This data handler is returned by the class buffer (p. 107) when the application wants to
deal with a dicom tag of type "TM" (time).
Return a string representing the time stored in the buffer (p. 107).
The returned string has the format: "HH:MM:SS.FFFFFF" where:
• HH is the hour
• MM is the minute
• SS is the second
• FFFFFF is the fraction of seconds in nanoseconds
Returns:
a string representing the time stored in the buffer (p. 107)
• HH is the hour
• MM is the minute
• SS is the second
• FFFFFF is the fraction of seconds in nanoseconds
Parameters:
value the string representing the time to be set
• dataHandlerTime.h
• dataHandlerTime.cpp
puntoexe::baseObject
puntoexe::imebra::image
Public Types
• enum bitDepth {
depthUnknown, depthU8, depthS8, depthU16,
depthS16 }
Define a single color component’s size.
• std::wstring getColorSpace ()
Get the image’s color space (DICOM standard).
• imbxUint32 getChannelsNumber ()
Get the number of allocated channels.
• bitDepth getDepth ()
Get the image’s bit depth.
• imbxUint32 getHighBit ()
Get the high bit.
Represents a single image (p. 232) of a dicom data (p. 139) set.
Images are embedded into the dicom structures (represented by the dataSet (p. 155)
class), stored in a compressed format.
The class image (p. 232) represents a decompressed raw image (p. 232), extracted from
a dicom structure using dataSet::getImage() (p. 163).
image (p. 232) objects can also be created by the application and stored into a dicom
structure using the function dataSet::setImage() (p. 169).
The image (p. 232) and its buffer (p. 107) share a common lock object: this means
that a lock to the image (p. 232) object will also locks the image’s buffer (p. 107) and
viceversa.
Examples:
dicom2jpeg/dicom2jpeg.cpp.
Enumerator:
depthUnknown the bit depth is unknown
depthU8 unsigned integer, 1 byte
depthS8 signed integer, 1 byte
depthU16 unsigned integer, 2 bytes
depthS16 signed integer, 2 bytes
Parameters:
sizeX the image’s width, in pixels.
sizeY the image’s height, in pixels.
depth the size of a single color’s component.
colorSpace The color space as defined by the DICOM standard. Valid colorspace
are:
• "RGB"
• "YBR_FULL"
• "YBR_PARTIAL"
• "YBR_RCT"
• "YBR_ICT"
• "PALETTE COLOR"
• "MONOCHROME2"
• "MONOCHROME1"
highBit the highest bit used for integer values.
Returns:
the data (p. 139) handler containing the image’s data (p. 139)
Returns:
the number of color channels in the image (p. 232)
Returns:
a string with the image’s color space
Retrieve a data (p. 139) handler for managing the image’s buffer (p. 107).
The retrieved data (p. 139) handler gives access to the image’s buffer (p. 107). The
image’s buffer (p. 107) stores the data (p. 139) in the following format:
• when multiple channels are present, then the channels are ALWAYS interleaved
• the channels are NEVER subsampled or oversampled. The subsampling/over-
sampling is done by the codecs (p. 75) when the image (p. 232) is stored or
loaded from the dicom structure.
• the first stored value represent the first channel of the top/left pixel.
• each row is stored countiguously, from the top to the bottom.
Parameters:
bWrite true if the application wants to write into the buffer (p. 107), false other-
wise.
pRowSize the function will fill the variable pointed by this parameter with the size
of a single row, in bytes.
pChannelPixelSize the function will fill the variable pointed by this parameter
with the size of a single pixel, in bytes.
pChannelsNumber the function will fill the variable pointed by this parameter
with the number of channels per pixel.
Returns:
a pointer to the data (p. 139) handler for the image’s buffer (p. 107).
Returns:
the bit depth.
Returns:
the image’s high bit
Parameters:
pSizeX a pointer to the variable to fill with the image’s width (in pixels).
pSizeY a pointer to the variable to fill with the image’s height (in pixels).
Parameters:
pSizeX a pointer to the variable to fill with the image’s width (in millimeters).
pSizeY a pointer to the variable to fill with the image’s height (in millimeters).
Parameters:
sizeX the new image’s width, in millimeters.
sizeY the new image’s height, in millimeters.
The documentation for this class was generated from the following files:
• image.h
• image.cpp
puntoexe::imebra::imageException
This is the base class for the exceptions thrown by the image (p. 232) class.
Parameters:
message the message to store into the exception
The documentation for this class was generated from the following file:
• image.h
13.62 puntoexe::imebra::imageExceptionInvalidSize
Class Reference
This exception is thrown when an invalid size in pixels is specified in the function
create().
#include <image.h>
Inheritance diagram for puntoexe::imebra::imageExceptionInvalidSize::
puntoexe::imebra::imageException
puntoexe::imebra::imageExceptionInvalidSize
This exception is thrown when an invalid size in pixels is specified in the function
create().
The documentation for this class was generated from the following file:
• image.h
13.63 puntoexe::imebra::imageExceptionUnknownColorSpace
Class Reference
This exception is thrown when an unknown color space is specified in the function
create().
#include <image.h>
Inheritance diagram for puntoexe::imebra::imageExceptionUnknownColorSpace::
puntoexe::imebra::imageException
puntoexe::imebra::imageExceptionUnknownColorSpace
This exception is thrown when an unknown color space is specified in the function
create().
The documentation for this class was generated from the following file:
• image.h
13.64 puntoexe::imebra::imageExceptionUnknownDepth
Class Reference
This exception is thrown when an unknown depth is specified as a parameter.
#include <image.h>
Inheritance diagram for puntoexe::imebra::imageExceptionUnknownDepth::
puntoexe::imebra::imageException
puntoexe::imebra::imageExceptionUnknownDepth
• image.h
puntoexe::baseObject
puntoexe::imebra::lut
• std::wstring getDescription ()
Return the lut’s description.
• imbxUint8 getBits ()
Return the number of bits used to store a mapped value.
• imbxUint32 getSize ()
Return the lut’s size.
• bool checkValidDataRange ()
Checks if the data (p. 139) in the LUT is consistent with the number of bits specified
in number of bits.
• imbxInt32 getFirstMapped ()
Checks if the data (p. 139) in the LUT is consistent with the number of bits specified
in number of bits.
Returns:
true if the data (p. 139) is correct, false otherwise
Parameters:
pDestination a pointer to the first element of the imbxInt32 array
destSize the size of the array, in elements
pFirstMapped a pointer to a variable that this function will fill with the id of the
first mapped element
Parameters:
size the number of mapped values that will be set by setLutValue() (p. 245)
firstMapped the id of the first mapped value
bits the number of bits to use to store the mapped values
description a string that describes the lut (p. 241)
Fill the data (p. 139) handlers (p. 77) with the lut’s descriptor and the lut’s data
(p. 139).
This function is usually called when a lut (p. 241) has to be written in a dataSet
(p. 155).
Parameters:
pDescriptor the data (p. 139) handler that manages the buffer (p. 107) that will
store the lut (p. 241) descriptor
pData the data (p. 139) handler that manages the buffer (p. 107) that will store
the lut (p. 241) data (p. 139)
Returns:
the number of bits used to store a mapped value
Returns:
the lut (p. 241) description
Returns:
the id of the first mapped value
Returns:
the number of mapped value stored in the lut (p. 241)
Parameters:
id the id to look for
Returns:
the value mapped by the specified id
Parameters:
lutValue the value to look for in the lut (p. 241)
Returns:
the id that maps the specified value
Initializes the lut (p. 241) with the values stored in three data (p. 139) handlers (p. 77),
usually retrieved from a dataset.
Parameters:
pDescriptor the handler that manages the lut (p. 241) descriptor (size, first
mapped value and number of bits)
pData the handler that manages the lut (p. 241) data (p. 139)
description a string that describes the lut (p. 241)
Parameters:
startValue the id of the mapped value
lutValue the mapped value
The documentation for this class was generated from the following files:
• LUT.h
• LUT.cpp
puntoexe::imebra::lutException
puntoexe::imebra::lutExceptionCorrupted puntoexe::imebra::lutExceptionWrongIndex
This is the base class for the exceptions thrown by the lut (p. 241) class.
The documentation for this class was generated from the following file:
• LUT.h
13.67 puntoexe::imebra::lutExceptionCorrupted
Class Reference
This exception is thrown by the lut (p. 241) class when the the LUT information is
corrupted.
#include <LUT.h>
Inheritance diagram for puntoexe::imebra::lutExceptionCorrupted::
puntoexe::imebra::lutException
puntoexe::imebra::lutExceptionCorrupted
This exception is thrown by the lut (p. 241) class when the the LUT information is
corrupted.
The documentation for this class was generated from the following file:
• LUT.h
13.68 puntoexe::imebra::lutExceptionWrongIndex
Class Reference
This exception is thrown by the lut (p. 241) class when the wrong index or id is speci-
fied as a parameter.
#include <LUT.h>
Inheritance diagram for puntoexe::imebra::lutExceptionWrongIndex::
puntoexe::imebra::lutException
puntoexe::imebra::lutExceptionWrongIndex
This exception is thrown by the lut (p. 241) class when the wrong index or id is speci-
fied as a parameter.
The documentation for this class was generated from the following file:
• LUT.h
• virtual ∼transaction ()
Destroy the transaction (p. 249) and commit the changes if bCommitTransaction was
set to true in the constructor or there are no parent transactions.
• void abort ()
Rollback all the changes made to far.
• the first phase build the data (p. 139) for all the buffers and check for errors
• if there are no errors in the first phase then the second phase commits all the
changes and the modifications are finalized.
Parameters:
bCommitTransaction if this parameter is true then the transaction (p. 249) will
commit the changes in the destructor, otherwise the changes will be commit-
ted by the parent transaction (p. 249). When there are no parent transactions,
then the commit happens anyway
Destroy the transaction (p. 249) and commit the changes if bCommitTransaction was
set to true in the constructor or there are no parent transactions.
If abort() (p. 250) was called before the destruction of the transaction (p. 249) then
the modified data (p. 139) will not be copied back to the buffers.
• transaction.h
• transaction.cpp
13.70 puntoexe::imebra::transforms::colorTransforms::colorTransform
Class Reference
This is the base class used by the color transforms (p. 79) classes.
#include <colorTransform.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::colorTransform::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFULL
puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB
puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL
puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL
puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB
puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB
This is the base class used by the color transforms (p. 79) classes.
Each color transform (p. 285) class can handle a color space conversion from one color
space to another.
The class colorTransformsFactory (p. 253) can select the right transform (p. 285)
automatically when queried with the initial and the final color spaces as parameters.
Returns:
a new instance of the colorTransform (p. 251). The new instance will have the
same class of the instance on which the function is called
Return the name of the color space that this colorTransform (p. 251) can generate.
Returns:
a string with the name of the color space that can be generated by the colorTrans-
form (p. 251)
Return the name of the color space that this colorTransform (p. 251) can convert.
Returns:
a string with the name of the color space that can be converted by the colorTrans-
form (p. 251)
The documentation for this class was generated from the following files:
• colorTransform.h
• colorTransform.cpp
13.71 puntoexe::imebra::transforms::colorTransforms::colorTransformsFactor
Class Reference
This class maintains a list of all the available colorTransform (p. 251) classes and
retrieve the most appropriate transform (p. 285) class (or classes) when a color space
conversion is needed.
#include <colorTransformsFactory.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::colorTransformsFactory::
puntoexe::baseObject
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactory
Static functions
Static functions that operate on the color space name
Returns true if the color space name specified in the parameter has only one color
channel and is monochrome (it doesn’t have a lookup color table).
This class maintains a list of all the available colorTransform (p. 251) classes and
retrieve the most appropriate transform (p. 285) class (or classes) when a color space
conversion is needed.
One instance of this class is statically allocated by the library; the application does
NOT have to allocate its own instance of colorTransformsFactory (p. 253).
A pointer to the statically allocated colorTransformsFactory (p. 253)
class can be obtained by calling that static function colorTransformsFac-
tory::getColorTransformsFactory() (p. 255).
The class can also retrieve more information from a name of a color space (in dicom
standard). For instance, both the Dicom color space "YBR_FULL_422" and "YBR_-
FULL" describe the color space YBR, but the first indicates that the image (p. 232) is
subsampled both horizontally and vertically.
The colorTransformsFactory (p. 253) can normalize the color space name (e.g.: con-
vert "YBR_FULL_422" to "YBR_FULL") and can retrieve the subsampling parame-
ters.
Returns true if the color space specified in the parameter can be subsampled.
For instance, the color spaces "YBR_FULL" and "YBR_PARTIAL" can be subsam-
pled, but the color space "RGB" cannot be subsampled.
Parameters:
colorSpace the name of the color space to be tested
Returns:
true if the name of the color space in the parameter colorSpace can be subsampled
Returns:
a pointer to the unique instance of the colorTransformsFactory (p. 253)
Parameters:
colorSpace the name of the color space for which the number of channels must
be returned
Returns:
the number of color channels in the specified color channel
Returns a transform (p. 285) or a sequence of transforms (p. 79) (see transform-
sChain (p. 298)) that can convert the pixels from one color space to another color
space.
If the no conversion is needed then the function returns 0. If the function cannot find
any suitable transform (p. 285) then a colorTransformsFactoryExceptionNoTrans-
form (p. 260) is thrown.
Parameters:
startColorSpace the color space from which the conversion has to take place
endColorSpace the color space resulting from the conversion
Returns:
the transform (p. 285) that can convert the startColorSpace into endColorSpace,
or 0 if startColorSpace and endColorSpace have the same value
Returns true if the color space name specified in the parameter has only one color
channel and is monochrome (it doesn’t have a lookup color table).
At the moment, only the color space names "MONOCHROME1" and
"MONOCHROME2" indicate a monochrome color space.
Parameters:
colorSpace the name of the color space to be tested
Returns:
true if the color space indicated in the parameter is monochrome, or false otherwise
Returns true if the name of the color space specified in the parameter indicates that the
chrominance channels are subsampled horizontally.
Parameters:
colorSpace the name of the color space to be tested
Returns:
true if the name of the color space in the parameter colorSpace has the chrominance
channels subsampled horizontally
Returns true if the name of the color space specified in the parameter indicates that the
chrominance channels are subsampled vertically.
Parameters:
colorSpace the name of the color space to be tested
Returns:
true if the name of the color space in the parameter colorSpace has the chrominance
channels subsampled vertically
Parameters:
colorSpace the name of the color space to which the subsampling information
should be added
bSubsampleX if true, then the function will make the color space subsampled
horizontally. The color space will also be subsampled vertically
bSubsampleY if true, then the function will make the color space subsampled
vertically
Returns:
the color space name subsampled as specified
Parameters:
colorSpace the color space name to be normalized
Returns:
the normalized color space name
The documentation for this class was generated from the following files:
• colorTransformsFactory.h
• colorTransformsFactory.cpp
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryException
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExceptionNoTransform
This is the base class for the exceptions thrown by colorTransformsFactory (p. 253).
The documentation for this class was generated from the following file:
• colorTransformsFactory.h
13.73 puntoexe::imebra::transforms::colorTransforms::colorTransform
Class Reference
This exception is thrown by the function colorTransformsFactory::getTransform()
(p. 255) when it cannot find any transform (p. 285) that can convert the specified color
spaces.
#include <colorTransformsFactory.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExceptionNoTr
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryException
puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExceptionNoTransform
• colorTransformsFactory.h
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToMONOCHROME1
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space MONOCHROME2.
The input image (p. 232) has to have the colorspace MONOCHROME1, while the
output image (p. 232) is created by the transform (p. 285) and will have the colorspace
MONOCHROME2.
The documentation for this class was generated from the following files:
• MONOCHROME1ToMONOCHROME2.h
• MONOCHROME1ToMONOCHROME2.cpp
13.75 puntoexe::imebra::transforms::colorTransforms::MONOCHROM
Class Reference
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space RGB.
#include <MONOCHROME1ToRGB.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space RGB.
The input image (p. 232) has to have the colorspace MONOCHROME1, while the
output image (p. 232) is created by the transform (p. 285) and will have the colorspace
RGB.
The documentation for this class was generated from the following files:
• MONOCHROME1ToRGB.h
• MONOCHROME1ToRGB.cpp
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToMONOCHROME1
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space MONOCHROME1.
The input image (p. 232) has to have the colorspace MONOCHROME2, while the
output image (p. 232) is created by the transform (p. 285) and will have the colorspace
MONOCHROME1.
The documentation for this class was generated from the following files:
• MONOCHROME1ToMONOCHROME2.h
• MONOCHROME1ToMONOCHROME2.cpp
13.77 puntoexe::imebra::transforms::colorTransforms::MONOCHROM
Class Reference
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space RGB.
#include <MONOCHROME2ToRGB.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space RGB.
The input image (p. 232) has to have the colorspace MONOCHROME2, while the
output image (p. 232) is created by the transform (p. 285) and will have the colorspace
RGB.
The documentation for this class was generated from the following files:
• MONOCHROME2ToRGB.h
• MONOCHROME2ToRGB.cpp
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFULL
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space YBR_FULL.
The input image (p. 232) has to have the colorspace MONOCHROME2, while the
output image (p. 232) is created by the transform (p. 285) and will have the colorspace
YBR_FULL.
The documentation for this class was generated from the following files:
• MONOCHROME2ToYBRFULL.h
• MONOCHROME2ToYBRFULL.cpp
13.79 puntoexe::imebra::transforms::colorTransforms::PALETTECOL
Class Reference
Transforms an image (p. 232) from the colorspace PALETTE COLOR into the color
space RGB.
#include <PALETTECOLORToRGB.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB
puntoexe::imebra::transforms::colorTransforms::RGBToPALETTECOLOR
• virtual void setLut (ptr< lut > red, ptr< lut > green, ptr< lut > blue)
Transforms an image (p. 232) from the colorspace PALETTE COLOR into the color
space RGB.
The input image (p. 232) has to have the colorspace PALETTE COLOR, while the
output image (p. 232) is created by the transform (p. 285) and will have the colorspace
RGB.
The transform (p. 285) needs a dataSet (p. 155) or a palette in order to perform the
conversion. Use declareDataSet() to declare the dataSet (p. 155) or setLut() (p. 267)
to declare the palette.
Parameters:
red the lut (p. 241) that stores the red components of the mapped values
green the lut (p. 241) that stores the green components of the mapped values
blue the lut (p. 241) that stores the blue components of the mapped values
The documentation for this class was generated from the following files:
• PALETTECOLORToRGB.h
• PALETTECOLORToRGB.cpp
13.80 puntoexe::imebra::transforms::colorTransforms::RGBToMONO
Class Reference
Transforms an image (p. 232) from the colorspace RGB into the color space
MONOCHROME2.
#include <RGBToMONOCHROME2.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2
Transforms an image (p. 232) from the colorspace RGB into the color space
MONOCHROME2.
The input image (p. 232) has to have the colorspace RGB, while the output im-
age (p. 232) is created by the transform (p. 285) and will have the colorspace
MONOCHROME2.
The documentation for this class was generated from the following files:
• RGBToMONOCHROME2.h
• RGBToMONOCHROME2.cpp
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB
puntoexe::imebra::transforms::colorTransforms::RGBToPALETTECOLOR
Transforms an image (p. 232) from the colorspace RGB into the color space PALETTE
COLOR.
The input image (p. 232) has to have the colorspace RGB, while the output image
(p. 232) is created by the transform (p. 285) and will have the colorspace PALETTE
COLOR.
If a palette has been defined by calling setLut() or declareDataSet(), then the specified
lut (p. 241) will be used for the conversion.
If the declared dataset doesn’t contain a palette, or the dataSet (p. 155) nor the palette
have been defined then the function calculate a new palette and stores it in the de-
clared dataSet (p. 155) (if any). The calculated lut (p. 241) will also be used for the
conversion.
When multiple image (p. 232) have been declared as input parameters, then the palette
will be shared by all the images.
The documentation for this class was generated from the following files:
• RGBToPALETTECOLOR.h
• RGBToPALETTECOLOR.cpp
13.82 puntoexe::imebra::transforms::colorTransforms::RGBToYBRFU
Class Reference
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
FULL.
#include <RGBToYBRFULL.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
FULL.
The input image (p. 232) has to have the colorspace RGB, while the output image
(p. 232) is created by the transform (p. 285) and will have the colorspace YBR_FULL.
The documentation for this class was generated from the following files:
• RGBToYBRFULL.h
• RGBToYBRFULL.cpp
13.83 puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL
Class Reference
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
PARTIAL.
#include <RGBToYBRPARTIAL.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
PARTIAL.
The input image (p. 232) has to have the colorspace RGB, while the output image
(p. 232) is created by the transform (p. 285) and will have the colorspace YBR_-
PARTIAL.
The documentation for this class was generated from the following files:
• RGBToYBRPARTIAL.h
• RGBToYBRPARTIAL.cpp
13.84 puntoexe::imebra::transforms::colorTransforms::YBRFULLToM
Class Reference
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
MONOCHROME2.
#include <YBRFULLToMONOCHROME2.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
MONOCHROME2.
The input image (p. 232) has to have the colorspace YBR_FULL, while the output
image (p. 232) is created by the transform (p. 285) and will have the colorspace
MONOCHROME2.
The documentation for this class was generated from the following files:
• YBRFULLToMONOCHROME2.h
• YBRFULLToMONOCHROME2.cpp
13.85 puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB
Class Reference
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
RGB.
#include <YBRFULLToRGB.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
RGB.
The input image (p. 232) has to have the colorspace YBR_FULL, while the output
image (p. 232) is created by the transform (p. 285) and will have the colorspace RGB.
The documentation for this class was generated from the following files:
• YBRFULLToRGB.h
• YBRFULLToRGB.cpp
13.86 puntoexe::imebra::transforms::colorTransforms::YBRPARTIAL
Class Reference
Transforms an image (p. 232) from the colorspace YBR_PARTIAL into the color space
RGB.
#include <YBRPARTIALToRGB.h>
Inheritance diagram for puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::colorTransform
puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB
Transforms an image (p. 232) from the colorspace YBR_PARTIAL into the color space
RGB.
The input image (p. 232) has to have the colorspace YBR_PARTIAL, while the output
image (p. 232) is created by the transform (p. 285) and will have the colorspace RGB.
The documentation for this class was generated from the following files:
• YBRPARTIALToRGB.h
• YBRPARTIALToRGB.cpp
13.87 puntoexe::imebra::transforms::drawBitmap
Class Reference
This transform (p. 285) takes an image (p. 232) as an input and returns an 8 bit RGB
bitmap of the requested image’s area; the image’s area is expanded or reduced to fit
into the destination bitmap’s size.
#include <drawBitmap.h>
Inheritance diagram for puntoexe::imebra::transforms::drawBitmap::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::drawBitmap
This transform (p. 285) takes an image (p. 232) as an input and returns an 8 bit RGB
bitmap of the requested image’s area; the image’s area is expanded or reduced to fit
into the destination bitmap’s size.
The transform (p. 285) processes only the first declared image (p. 232). A requirement
of this transform (p. 285) is that the dataSet (p. 155) has to be declared before the
input image (p. 232); this means that declareDataSet() (p. 286) has to be called before
declareInputImage().
Declare the total size of a bitmap that contains the entire image (p. 232) and the rectan-
gle of that bitmap that has to be generated. A subsequent call to getOutputBitmap()
(p. 276) will return the requested bitmap.
This class is used by the class view (p. 305).
Parameters:
totalWidthPixels the width of the bitmap that contains the whole image (p. 232)
declared with declareInputImage()
totalHeightPixels the width of the bitmap that contains the whole image (p. 232)
declared with declareInputImage()
visibleTopLeftX the horizontal coordinate of the top-left corner of the destination
bitmap’s rectangle that has to be updated
visibleTopLeftY the vertical coordinate of the top-left corner of the destination
bitmap’s rectangle that has to be updated
visibleBottomRightX the horizontal coordinate of the bottom-right corner of the
destination bitmap’s rectangle that has to be updated
visibleBottomRightY the vertical coordinate of the bottom-right corner of the des-
tination bitmap’s rectangle that has to be updated
alignByte the number of bytes used to align each row of the returned bitmap
bBGR true if the returned bitmap has to be in the BGR format, false if it has to be
in RGB format
Returns a pointer to a bitmap that can be used to update the area defined by the parame-
ters visibleTopLeftX, visibleTopLeftY, visibleBottomRightX, visibleBottomRightY in
the function declareBitmapType() (p. 276).
The pointer refers to a memory (p. 328) area that is managed by this transform
(p. 285); DO NOT FREE THE MEMORY, THE TRANSFORM WILL.
Subsequent calls to doTransform() will reuse the memory (p. 328) area referred by the
returned pointer.
Parameters:
pWidthPixels a pointer to a variable that will by filled with the returned bitmap’s
width, in pixels
pHeightPixels a pointer to a variable that will be filled with the returned bitmap’s
height, in pixels
pRowLengthBytes a pointer to a variable that will be filled with the image’s rows’
length, in bytes
Returns:
a pointer to a memory (p. 328) area containing the bitmap data (p. 139). The
memory (p. 328) is managed by the transform (p. 285) and must NOT be freed
by the caller
The documentation for this class was generated from the following files:
• drawBitmap.h
• drawBitmap.cpp
13.88 puntoexe::imebra::transforms::drawBitmapException
Class Reference
Base class used for the exceptions thrown by drawBitmap (p. 275).
#include <drawBitmap.h>
Inheritance diagram for puntoexe::imebra::transforms::drawBitmapException::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::drawBitmapException
Base class used for the exceptions thrown by drawBitmap (p. 275).
The documentation for this class was generated from the following file:
• drawBitmap.h
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::drawBitmapException
puntoexe::imebra::transforms::drawBitmapExceptionDataSetNotDeclared
This exception is thrown by declareInputImage() if the dataSet (p. 155) hasn’t been
declared yet.
The documentation for this class was generated from the following file:
• drawBitmap.h
13.90 puntoexe::imebra::transforms::drawBitmapExceptionImageNotD
Class Reference
This exception is thrown by doTransform() if the image (p. 232) hasn’t been declared
yet.
#include <drawBitmap.h>
Inheritance diagram for puntoexe::imebra::transforms::drawBitmapExceptionImageNotDeclared::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::drawBitmapException
puntoexe::imebra::transforms::drawBitmapExceptionImageNotDeclared
This exception is thrown by doTransform() if the image (p. 232) hasn’t been declared
yet.
The documentation for this class was generated from the following file:
• drawBitmap.h
13.91 puntoexe::imebra::transforms::drawBitmapExceptionInvalidAlignByte
Class Reference
This exception is thrown by declareBitmapType() if the align byte is illegal (1, 2 and 4
are the typical values).
#include <drawBitmap.h>
Inheritance diagram for puntoexe::imebra::transforms::drawBitmapExceptionInvalidAlignByte::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::drawBitmapException
puntoexe::imebra::transforms::drawBitmapExceptionInvalidAlignByte
This exception is thrown by declareBitmapType() if the align byte is illegal (1, 2 and 4
are the typical values).
The documentation for this class was generated from the following file:
• drawBitmap.h
13.92 puntoexe::imebra::transforms::drawBitmapExceptionInvalidAre
Class Reference
This exception is thrown by declareBitmapType() if the image’s area that has to be
generated is not valid.
#include <drawBitmap.h>
Inheritance diagram for puntoexe::imebra::transforms::drawBitmapExceptionInvalidArea::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::drawBitmapException
puntoexe::imebra::transforms::drawBitmapExceptionInvalidArea
• drawBitmap.h
13.93 puntoexe::imebra::transforms::modalityVOILUT
Class Reference
This class transforms (p. 79) the pixel values of the image (p. 232) retrieved from the
dataset into values that are meaningful to th application.
#include <modalityVOILUT.h>
Inheritance diagram for puntoexe::imebra::transforms::modalityVOILUT::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::modalityVOILUT
puntoexe::imebra::transforms::modalityVOILUTInverse
This class transforms (p. 79) the pixel values of the image (p. 232) retrieved from the
dataset into values that are meaningful to th application.
For instance, the original pixel values could store a device specific value that has a
meaning only when used by the device that generated it: this transform (p. 285) uses
the modality VOI/LUT defined in the dataset to convert the original values into optical
density or other known measure units.
In order to perform the transformation the class needs to know the dataset from which
the image (p. 232) has been retrieved, then the function transform::declareDataSet()
(p. 286) must be called.
If the dataset doesn’t define any modality VOI/LUT transformation, then the input
image (p. 232) is simply copied into the output image (p. 232).
Examples:
dicom2jpeg/dicom2jpeg.cpp.
The documentation for this class was generated from the following files:
• modalityVOILUT.h
• modalityVOILUT.cpp
13.94 puntoexe::imebra::transforms::modalityVOILUTInverse
Class Reference
Executes the inverse modality VOI/LUT transformation (see modalityVOILUT
(p. 283)).
#include <modalityVOILUT.h>
Inheritance diagram for puntoexe::imebra::transforms::modalityVOILUTInverse::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::modalityVOILUT
puntoexe::imebra::transforms::modalityVOILUTInverse
• modalityVOILUT.h
• modalityVOILUT.cpp
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2 puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB puntoexe::imebra::transforms::transformBuffersInputOutput
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB
puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFULL
puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB
puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL
puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL
puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2
puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB
puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB
Parameters:
pDataSet the dataset to use for the transformation
Declare an input image (p. 232) for the transform (p. 285).
The transform (p. 285) will use the input image (p. 232) for its purposes when the
application will call doTransform() (p. 287).
Parameters:
imageNumber the transform (p. 285) can work with more than one input im-
age (p. 232). This parameter specifies the parameter’s ID. If another image
(p. 232) was already stored with this parameter’s ID, then it will be released.
pInputImage the image (p. 232) to use as the transform’s input parameter
Declare an output image (p. 232) for the transform (p. 285).
The transform (p. 285) will store the results in the output image (p. 232).
Parameters:
imageNumber the transform (p. 285) can work with more than one output im-
age (p. 232). This parameter specifies the parameter’s ID. If another image
(p. 232) was already stored with this parameter’s ID, then it will be released
pOutputImage the image (p. 232) to use as the transform’s output parameter
Returns:
a pointer to the active data (p. 139) set, or 0 if the dataset has not been set
Parameters:
imageNumber the ID of the output parameter to retrieve.
Returns:
the image (p. 232) used as output parameter or 0 if the output parameter has not
been defined
Parameters:
imageNumber the ID of the input parameter to retrieve
Returns:
the image (p. 232) used as input parameter or 0 if the input parameter has not been
defined
Returns:
false if the transform (p. 285) does something, or true if the transform (p. 285)
doesn’t do anything (e.g. an empty transformsChain (p. 298) object).
• transform.h
• transform.cpp
13.96 puntoexe::imebra::transforms::transformBuffers
Class Reference
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels.
#include <transformBuffers.h>
Inheritance diagram for puntoexe::imebra::transforms::transformBuffers::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace puntoexe::imebra::transforms::transformBuffersInputOutput
puntoexe::imebra::transforms::modalityVOILUTInverse puntoexe::imebra::transforms::VOILUTInverse
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels.
Don’t use this class directly but allocate CTransformBuffersInputOutput or CTrans-
formBuffersInPlace.
Get the data (p. 139) buffers and calls the doTransformBuffers().
Retrieve the data (p. 139) buffers from the input and output images and call the derived
class processing function.
Parameters:
inputImage the input image (p. 232)
outputImage the output image (p. 232)
sizeX the buffer’s width, in pixels
sizeY the buffer’s height, in pixels
inputColorSpace the color space of the input image (p. 232)
inputDepth the bit depth of the input image (p. 232)
inputHighBit the input image’s high bit
pOutputDepth pointer to the variable that the function fills with the output im-
age’s bit depth
pOutputHighBit pointer to the variable that the function fills with the output im-
age’s high bit
The documentation for this class was generated from the following files:
• transformBuffers.h
• transformBuffers.cpp
13.97 puntoexe::imebra::transforms::transformBuffersInPlace
Class Reference
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and don’t need two different buffers (input & output) but can work on a single
buffer (p. 107) that contains the input and output data (p. 139).
#include <transformBuffers.h>
Inheritance diagram for puntoexe::imebra::transforms::transformBuffersInPlace::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::modalityVOILUTInverse puntoexe::imebra::transforms::VOILUTInverse
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and don’t need two different buffers (input & output) but can work on a single
buffer (p. 107) that contains the input and output data (p. 139).
The class takes the input image (p. 232) and automatically allocate an output image
(p. 232) if it hasn’t been declared.
Then the virtual function doTransformBuffersInPlace() is called.
The documentation for this class was generated from the following files:
• transformBuffers.h
• transformBuffers.cpp
13.98 puntoexe::imebra::transforms::transformBuffersInputOutput
Class Reference
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and need two different buffers (one for the input image (p. 232) and one for the
outpu image (p. 232)).
#include <transformBuffers.h>
Inheritance diagram for puntoexe::imebra::transforms::transformBuffersInputOutput::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInputOutput
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and need two different buffers (one for the input image (p. 232) and one for the
outpu image (p. 232)).
The class takes the input image (p. 232) and automatically allocate an output image
(p. 232) if it hasn’t been declared.
Then the virtual function doTransformBuffersInputOutput() is called.
The documentation for this class was generated from the following files:
• transformBuffers.h
• transformBuffers.cpp
13.99 puntoexe::imebra::transforms::transformException
Class Reference
This is the base class of the exceptions thrown by the classes derived from transform
(p. 285).
#include <transform.h>
Inheritance diagram for puntoexe::imebra::transforms::transformException::
puntoexe::imebra::transforms::transformException
This is the base class of the exceptions thrown by the classes derived from transform
(p. 285).
The documentation for this class was generated from the following file:
• transform.h
13.100 puntoexe::imebra::transforms::transformExceptionDataInputIm
Class Reference
This exception is thrown by a transforms (p. 79) when an input image (p. 232) is
required but hasn’t been defined (see declareInputImage()).
#include <transform.h>
Inheritance diagram for puntoexe::imebra::transforms::transformExceptionDataInputImageDefined::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::transformExceptionDataInputImageDefined
This exception is thrown by a transforms (p. 79) when an input image (p. 232) is
required but hasn’t been defined (see declareInputImage()).
The documentation for this class was generated from the following file:
• transform.h
13.101 puntoexe::imebra::transforms::transformExceptionDataSetNotDefined
Class Reference
This exception is thrown by the transforms (p. 79) that need a defined dataSet (p. 155)
(see declareDataSet()) but don’t have any.
#include <transform.h>
Inheritance diagram for puntoexe::imebra::transforms::transformExceptionDataSetNotDefined::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::transformExceptionDataSetNotDefined
This exception is thrown by the transforms (p. 79) that need a defined dataSet (p. 155)
(see declareDataSet()) but don’t have any.
The documentation for this class was generated from the following file:
• transform.h
13.102 puntoexe::imebra::transforms::transformExceptionOutputImag
Class Reference
This exception is thrown by a transforms (p. 79) when an output image (p. 232) is
required but hasn’t been defined (see declareOutputImage()).
#include <transform.h>
Inheritance diagram for puntoexe::imebra::transforms::transformExceptionOutputImageNotDefined::
puntoexe::imebra::transforms::transformException
puntoexe::imebra::transforms::transformExceptionOutputImageNotDefined
This exception is thrown by a transforms (p. 79) when an output image (p. 232) is
required but hasn’t been defined (see declareOutputImage()).
The documentation for this class was generated from the following file:
• transform.h
13.103 puntoexe::imebra::transforms::transformHighBit
Class Reference
Shift the image’s content to adapt it to the specified high bit.
#include <transformHighBit.h>
Inheritance diagram for puntoexe::imebra::transforms::transformHighBit::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::transformHighBit
Examples:
dicom2jpeg/dicom2jpeg.cpp.
The documentation for this class was generated from the following files:
• transformHighBit.h
• transformHighBit.cpp
13.104 puntoexe::imebra::transforms::transformsChain
Class Reference
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformsChain
• void endTransformsChain ()
Tells to the transformsChain (p. 298) object that no more transforms (p. 79) will be
added to the chain.
Parameters:
pTransform the transform (p. 285) to be added to transformsChain (p. 298)
Tells to the transformsChain (p. 298) object that no more transforms (p. 79) will be
added to the chain.
This function MUST be called after all the transforms (p. 79) have been added to the
chain by addTransform() (p. 299) and before calling doTransform().
Returns:
true if the transforms (p. 79) chain is empty and will not perform any transforma-
tion
• transformsChain.h
• transformsChain.cpp
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::VOILUT
puntoexe::imebra::transforms::VOILUTInverse
Transform the value of the input image’s pixels by using the presentation VOI/LUT
defined in the dataSet (p. 155).
The dataSet (p. 155) could define more than one VOI/LUT: by default the transform
(p. 285) uses the first VOI or LUT defined in the dataset.
To control which VOI/LUT is used for the transformation the application must
use the functions getVOILUTId() (p. 301), getVOILUTDescription() (p. 301),
setVOILUT() (p. 302) or set the VOI or the LUT directly by calling setCenterWidth()
(p. 302) or setLUT() (p. 302).
Examples:
dicom2jpeg/dicom2jpeg.cpp.
Parameters:
pCenter pointer to the recipient for the VOI center
pWidth pointer to the recipient for the VOI width
Return a description for the VOI or LUT with the specified ID.
The VOI/LUT ID can be obtained by calling getVOILUTId() (p. 301).
Parameters:
VOILUTId the id of the VOI/LUT for which the description is required
Returns:
the VOI/LUT description
The returned ID can be used with the functions getVOILUTDescription() (p. 301) and
setVOILUT() (p. 302).
The function returns 0 when the requested VOI/LUT doesn’t exist.
The parameter VOILUTNumber is a zero based index used to scan all the available
VOIs first and then all the LUTs. For instance, if VOILUTNumber is 3 and the dataSet
(p. 155) contains 2 VOIs and 3 LUTs, then the function will return the ID for the second
LUT.
Parameters:
VOILUTNumber a number that identifies the VOI or the LUT for which the ID is
requested. The value 0 refers to the first VOI in the dataSet (p. 155) or to the
first LUT if there isn’t any defined VOI. Bigger values refer to the following
VOIs or LUTs when all the VOIs have been scanned
Returns:
an ID that can be used with getVOILUTDescription() (p. 301) and setVOILUT()
(p. 302), or 0 if the requested VOI/LUT doesn’t exist
Parameters:
center the center value of the VOI
width the width value of the VOI
Parameters:
pLut the lut (p. 241) that will be used for the transformation
Parameters:
VOILUTId the ID of the VOI/LUT to use for the transformation, or 0 to disable
the transformation
The documentation for this class was generated from the following files:
• VOILUT.h
• VOILUT.cpp
13.106 puntoexe::imebra::transforms::VOILUTInverse
Class Reference
Execute the inverse of the transformation executed by VOILUT (p. 300).
#include <VOILUT.h>
Inheritance diagram for puntoexe::imebra::transforms::VOILUTInverse::
puntoexe::baseObject
puntoexe::imebra::transforms::transform
puntoexe::imebra::transforms::transformBuffers
puntoexe::imebra::transforms::transformBuffersInPlace
puntoexe::imebra::transforms::VOILUT
puntoexe::imebra::transforms::VOILUTInverse
• VOILUT.h
• VOILUT.cpp
• void setImage (ptr< image > pImage, ptr< dataSet > pDataSet)
Define the image (p. 232) that the window must display.
• double getZoomFactor ()
Retrieve the active zoom factor.
• bool isAutoZoom ()
Return true if the zoom is in automatic mode. The zoom can be set in automatic
mode by calling setZoomFactor() (p. 316) with a negative zoom factor.
• virtual void invalidate (imbxInt32 left, imbxInt32 top, imbxInt32 right, im-
bxInt32 bottom)=0
Overwrite this method with a function that invalidate a portion of the window,
without redrawing it immediatly. The code doesn’t have to invalidate the back-
ground.
This class can be used as a base class by the windows that need to display a Dicom
image (p. 232).
The is an abstract class, so it cannot be used alone; it provides some functions that the
derived class must always overwrite because they are platform specific.
Because this class must always be overwritten its header is not included in the file
imebra.h (p. 461) and should be included in the header file of the derived class.
Costructor.
Each time a redraw operation is needed this class generates a bitmap that is then passed
to the virtual function drawBitmap() (p. 309).
The derived class can specify the byte alignment for each bitmap’s row and the order
of the RGB components.
Parameters:
rowByteAlign the number of bytes each bitmap’s row has to be aligned to. Usually
is for bytes on Windows
bBGR true if the RGB components in the bitmap has to be blue, green and then
red. false if the order has to be red, green, blue
Parameters:
pDeviceContext the pointer or the handle of the device context that must be used.
This value is passed directly to the functions called by this one:
• drawRectangle() (p. 310)
• drawBitmap() (p. 309)
• drawCursorLine() (p. 309)
left the left side of the visible rectangle
top the top side of the visible rectangle
right the right side of the visible rectangle
bottom the bottom side of the visible rectangle
Overwrite this method with a function that draws a bitmap on the screen in the specified
window’s rectangle.
Parameters:
pDeviceContext the device context to use for the drawing. This is the same value
that your application passes to the draw() (p. 308) function
left the horizontal coordinate of the top-left corner of the rectangle that contains
the bitmap
top the vertical coordinate of the top-left corner of the rectangle that contains the
bitmap
right the horizontal coordinate of the bottom-right corner of the rectangle that
contains the bitmap
bottom the vertical coordinate of the bottom-right corner of the rectangle that con-
tains the bitmap
bufferWidth the width of the bitmap contained in pBuffer, in pixels
bufferHeight the height of the bitmap contained in pBuffer, in pixels
bufferRowSizeBytes the size of a bitmap’s row, in bytes
pBuffer a pointer to an array if bytes representing the bitmap. The array contains
all the bitmap pixels, from the top-left to the bottom-right, row by row. The
rows are contiguous, not aligned to 4 bytes boundaries as in the Window’s
bitmaps. Each pixels has 3 bytes representing the red, green and blue com-
ponent (please note that the order of the color components is reversed in the
Window’s bitmaps)
Overwrite this method with a function that draws a line on the specified device context.
Parameters:
pDeviceContext the device context to use for the drawing. This is the same value
that your application passes to the drawCursor() function
startPointX the horizontal coordinate of the line’s starting point, in pixels
startPointY the vertical coordinate of the line’s starting point, in pixels
endPointX the horizontal coordinate of the line’s ending point, in pixels
Overwrite this method with a function that draws a rectangle on a device context.
Parameters:
pDeviceContext a pointer to a device context class. Is the same pointer that your
application passes to the draw() (p. 308) or the drawCursor() functions.
left the horizontal coordinate of the rectangle’s top-left corner
top the vertical coordinate of the rectangle’s top-left corner
right the horizontal coordinate of the rectangle’s bottom-right corner
bottom the vertical coordinate of the rectangle’s bottom-right corner
colorRed the red component of the rectangle’s color
colorGreen the green component of the rectangle’s color
colorBlue the blue component of the rectangle’s color
Get the color used to draw the background around the image (p. 232).
Parameters:
pRed a pointer to a variable filled with the red component of the background
pGreen a pointer to a variable filled with the green component of the background
pBlue a pointer to a variable filled with the blue component of the background
Returns:
the image (p. 232) currently displayed in the window
Retrieve the coordinates of the rectangle that contains the image (p. 232).
When an image (p. 232) is set with setImage() (p. 315) or the zoom factor is changed,
the rectangle containing the image (p. 232) is recalculated by updateImageRect().
This function retrieves the latest rectangle calculated by updateImageRect().
Parameters:
pLeft a pointer to a variable filled with the horizontal coordinate of the rectangle’s
top-left corner
pTop a pointer to a variable filled with the vertical coordinate of the rectangle’s
top-left corner
pRight a pointer to a variable filled with the horizontal coordinate of the rectan-
gle’s bottom-right corner
pBottom a pointer to a variable filled with the vertical coordinate of the rectangle’s
bottom-right corner
Overwrite this method with a function that retrieve the screen’s resolution, in pixels per
inch.
Parameters:
pHorzDPI a pointer to a variable that the function must fill with the horizontal
resolution, in pixels per inch
pVertDPI a pointer to a variable that the function must fill with the vertical reso-
lution, in pixels per inch
Overwrite this method with a function that retrieves the current position in the scroll
bars, in screen’s pixels.
Parameters:
pScrollX a pointer to a variable that the function must fill with the horizontal scroll
bar’s position
pScrollY a pointer to a variable that the function must fill with the vertical scroll
bar’s position
Overwrite this method with a function that retrieves the total virtual size of the window.
The virtual size is the size managed by the window’s scroll bars, in screen’s pixels.
Parameters:
pScrollSizeX a pointer to the value that the function fills with the window’s virtual
width, in pixels
pScrollSizeY a pointer to the value that the function fills with the window’s virtual
height, in pixels
Overwrite this method with a function that retrieve the size of the window’s client area,
in screen’s pixels.
Parameters:
pSizeX a pointer to the value that the function fills with the window’s width, in
pixels
pSizeY a pointer to the value that the function fills with the window’s height, in
pixels
Even when the zoom factor has been set to an automatic value (-1) this function retrieve
the real zoom factor.
Returns:
the active zoom factor.
Parameters:
imagePosX the horizontal pixel position for which the position in millimeters has
to be retrieved
Returns:
the horizontal position of the specified pixel, in millimeters
Parameters:
imagePosY the vertical pixel position for which the position in millimeters has to
be retrieved
Returns:
the vertical position of the specified pixel, in millimeters
Overwrite this method with a function that invalidate a portion of the window, without
redrawing it immediatly. The code doesn’t have to invalidate the background.
The coordinates of the invalidated area are passed in window’s pixels and relative to
the window top-left corner, without any scroll adjustment.
Parameters:
left the horizontal coordinate of the top-left corner of the rectangle that must be
invalidated, in window’s pixels
top the vertical coordinate of the top-left corner of the rectangle that must be in-
validated, in window’s pixels
right the horizontal coordinate of the bottom-right corner of the rectangle that
must be invalidated, in window’s pixels
bottom the vertical coordinate of the bottom-right corner of the rectangle that must
be invalidated, in window’s pixels
Return true if the zoom is in automatic mode. The zoom can be set in automatic mode
by calling setZoomFactor() (p. 316) with a negative zoom factor.
When the zoom is in automatic mode then the size of the rectangle that contains the
image (p. 232) is modified when the window’s size is modified.
Returns:
true if the zoom is in automatic mode, false otherwise
Return the horizontal pixel’s index that lays at the specified horizontal position, in
millimeters.
Parameters:
millimitersX the horizontal position in millimiters
Returns:
the index of the pixel that lays at the specified position
Return the vertical pixel’s index that lays at the specified vertical position, in millime-
ters.
Parameters:
millimitersY the vertical position in millimiters
Returns:
the index of the pixel that lays at the specified position
Set the color to be used to draw the background around the image (p. 232).
Parameters:
red the red component of the background color
green the green component of the background color
blue the blue component of the background color
Define the image (p. 232) that the window must display.
After the image (p. 232) has been set the function will invalidate the window and the
operating framework will take care of sending a repaint message to it.
If the view (p. 305) already had an image (p. 232) set with setImage() (p. 315) then the
function will take one of the following actions:
• if the new image (p. 232) has the same size of the old one (in pixels and millim-
iters), then the new image (p. 232) will be displayed in the same position of the
old one
• if the new image’s size differs from the old one then a new position will be
calculated for the new image (p. 232) so it will fit completly in the window’s
client area
Parameters:
pImage the image (p. 232) to be displayed in the window, or a null pointer to
remove the image (p. 232) from the window
pDataSet the dataSet (p. 155) from which the image (p. 232) was retrieved
Overwrite this method with a function that changes the position in the scroll bars, in
screen’s pixels.
Parameters:
scrollX the new position for the horizontal scroll bar, in pixels
scrollY the new position for the vertical scroll bar, in pixels
Overwrite this method with a function that sets the window’s virtual size.
The virtual size is the size managed by the window’s scroll bars, in screen’s pixels.
Parameters:
newScrollSizeX the virtual window’s width that must be set
newScrollSizeY the virtual window’s height that must be set
bInvalidate is true if the function must invalidate the window after changing the
virtual size, false otherwise. Note that the background doesn’t need to be
invalidated
Parameters:
zoomFactor the zoom factor to use when drawing the image (p. 232)
centerPointX the horizontal coordinate of the image’s pixel that should be cen-
tered in the window’s area. If -1 then the function calculates its value auto-
matically
centerPointY the vertical coordinate of the image’s pixek that should be centered
in the window’s area. If -1 then the function calculates its value automatically
Zoom to the selected image’s area. The rectangle’s coordinates are in image’s pixels.
This function calls updateImageRect() and updates the window.
Parameters:
left the horizontal coordinate of the top-left corner of the image’s rectangle that
must be shown in the window
top the vertical coordinate of the top-left corner of the image’s rectangle that must
be shown in the window
right the horizontal coordinate of the bottom-right corner of the image’s rectangle
that must be shown in the window
bottom the vertical coordinate of the bottom-right corner of the image’s rectangle
that must be shown in the window
Overwrite this method with a function that launches a redraw of the invalidated areas
of the window.
Translate the window’s horizontal coordinate into the image’s horizontal coordinate.
Use in pair with windowPosToImageY to translate the horizontal and the vertical co-
ordinates.
The window’s coordinates must include any scroll adjustment.
Parameters:
windowPosX the horizontal window’s coordinate, adjusted with the current hori-
zontal scroll position
Returns:
the image’s horizontal coordinate. The returned is always adjusted to the valid
range (is never less than 0 and never more than the image’s horizontal size)
Translate the window’s vertical coordinate into the image’s vertical coordinate.
Use in pair with windowPosToImageX to translate the horizontal and the vertical co-
ordinates.
The window’s coordinates must include any scroll adjustment.
Parameters:
windowPosY the vertical window’s coordinate, adjusted with the current vertical
scroll position
Returns:
the image’s vertical coordinate. The returned is always adjusted to the valid range
(is never less than 0 and never more than the image’s vertical size)
Parameters:
bZoomIn when true the function increase the zoom factor, otherwise it decreases
the zoom factor
centerPointX the horizontal coordinate of the image’s pixel that must be centered
in the window’s area
centerPointY the vertical coordinate of the image’s pixel that must be centered in
the window’s area
The documentation for this class was generated from the following files:
• viewHelper.h
• viewHelper.cpp
puntoexe::baseObject
puntoexe::imebra::waveform
• imbxUint32 getChannels ()
Retrieve the number of channels (tag 003A,0005).
• imbxUint32 getSamples ()
Retrieve the number of samples per channel (tag 003A,0010).
• imbxUint32 getBitsStored ()
Retrieve the number of bit stored (tag 003A,021A).
• imbxUint32 getBitsAllocated ()
Retrieve the number of bit allocated (tag 5400,1004).
• std::string getInterpretation ()
Return the data (p. 139) interpretation string (tag 5400,1006).
Waveforms are embedded into the dicom structures (represented by the dataSet
(p. 155) class), stored in sequence items (one waveform (p. 319) per item).
Use dataSet::getWaveform() (p. 168) to retrieve a waveform (p. 319) from a dataSet
(p. 155).
Constructor. Initializes the class and connects it to the sequence item containing the
waveform (p. 319) data (p. 139).
Parameters:
pDataSet the sequence item containing the waveform (p. 319). Use
dataSet::getSequenceItem() (p. 164) to retrieve the sequence
item containing the waveform (p. 319) or construct the class with
dataSet::getWaveform() (p. 168)
Returns:
the number of bits allocated
Returns:
the number of bits stored
Returns:
the number of channels
Parameters:
channel the channel for which the data (p. 139) is required
paddingValue the value that the function must write in the returned data (p. 139)
in place of the original padding value. Specify a number outside the range
-32768..65535
Returns:
a data (p. 139) handler attached to ready to use data (p. 139). Use
handlers::dataHandler (p. 195)->GetSignedLong() or handlers::dataHandler
(p. 195)->GetSignedLongIncPointer() to retrieve the data (p. 139)
Returns:
the interpretation string. Possible values are:
• "SB": signed 8 bit linear
• "UB": unsigned 8 bit linear
• "MB": 8 bit u-law
• "AB": 8 bit a-law
• "SS": signed 16 bit
• "US": unsigned 16 bit
Returns:
the number of samples per channel
Returns:
the sequence item used by the waveform (p. 319)
The documentation for this class was generated from the following files:
• waveform.h
• waveform.cpp
• virtual ∼lockCriticalSection ()
Destroy the object lockCriticalSection (p. 323) and unlock the previously locked crit-
icalSection (p. 95).
This class locks a critical section in the constructor and unlocks it in the destructor.
This helps to correctly release a critical section in case of exceptions or premature exit
from a function that uses the critical section.
Creates the object lockCriticalSection (p. 323) and lock the specified criticalSection
(p. 95).
Parameters:
pCriticalSection a pointer to the criticalSection (p. 95) that has to be locked
13.109.2.2 puntoexe::lockCriticalSection::∼lockCriticalSection ()
[virtual]
Destroy the object lockCriticalSection (p. 323) and unlock the previously locked crit-
icalSection (p. 95).
The documentation for this class was generated from the following files:
• criticalSection.h
• criticalSection.cpp
Public Types
• virtual ∼lockMultipleObjects ()
Destroy the locker and unlock all the locked objects.
• void unlock ()
Unlock all the locked objects.
Construct the locker and lock all the objects listed in the pObjectsList.
The function looks for the external lockers (if any). An object may be listed several
times in the list.
Parameters:
pObjectsList a list of pointers to the objects to be locked
13.110.3.2 puntoexe::lockMultipleObjects::∼lockMultipleObjects ()
[virtual]
• baseObject.h
• baseObject.cpp
• virtual ∼lockObject ()
Unlock the access to the locked object.
• void unlock ()
Release the lock on the locked object.
Parameters:
pObject a pointer to the object to lock
• baseObject.h
• baseObject.cpp
puntoexe::baseObject
puntoexe::memory
• void clear ()
Clear the content of the managed string of bytes.
• imbxUint32 size ()
Return the size of the managed memory (p. 328) in bytes.
• imbxUint8 ∗ data ()
Return a pointer to the memory (p. 328) managed by the object.
• bool empty ()
Return true if the size of the managed memory (p. 328) is 0.
Copy the specified array of bytes into the managed memory (p. 328).
Parameters:
pSource a pointer to the buffer containing the bytes to be copied
sourceLength the number of bytes stored in the buffer pSource and to be copied
into the managed memory (p. 328)
Copy the content of the memory (p. 328) managed by another memory (p. 328) object
into the memory (p. 328) managed by this object.
Parameters:
sourceMemory a pointer to the memory (p. 328) object from which the data has
to be copied
Returns:
a pointer to the data managed by the object
Returns:
true if the managed memory’s size is 0 or false otherwise
Reserve the specified quantity of bytes for the memory (p. 328) object. This doesn’t
modify the actual size of the memory (p. 328) object.
Parameters:
reserveSize the number of bytes to reserve for the memory (p. 328) object.
Parameters:
newSize the new size of the buffer, in bytes
Returns:
the size of the managed memory (p. 328), in bytes
Parameters:
transferFrom the object from which the memory (p. 328) must be transferred
The documentation for this class was generated from the following files:
• memory.h
• memory.cpp
Stores unused memory (p. 328) objects (see puntoexe::memory (p. 328)) so they can
be reused when needed.
#include <memory.h>
• void flush ()
Discard all the currently unused memory (p. 328).
Stores unused memory (p. 328) objects (see puntoexe::memory (p. 328)) so they can
be reused when needed.
One instance of this class is statically allocated by the library. Don’t allocate new
instance of this class.
To obtain a pointer to the statically allocated instance of memoryPool (p. 332) call the
static function memoryPool::getMemoryPool() (p. 333).
When the reference counter of a memory (p. 328) object reaches 0, the memory
(p. 328) object may not be deleted immediatly; infact, if the memory (p. 328) man-
aged by the memory (p. 328) pool matches some predefined requisites, the memory
(p. 328) object is temporarily stored in the memory (p. 328) pool and reused when a
request for a memory (p. 328) object is received.
The memory (p. 328) pool tries to reuse the memory (p. 328) object that manages
an amount of memory (p. 328) similar to the amount of memory (p. 328) requested
through getMemory() (p. 333).
When a memory (p. 328) object is not used for a while then it is deleted permanently.
Parameters:
requestedSize the size that the string managed by the returned memory (p. 328)
object must have
Returns:
a pointer to the reused or new memory (p. 328) object: in any case the reference
counter of the returned object will be 1
Returns:
a pointer to the statically allocated instance of memoryPool (p. 332)
The documentation for this class was generated from the following files:
• memory.h
• memory.cpp
puntoexe::baseObject
puntoexe::baseStream
puntoexe::memoryStream
This class derives from the baseStream (p. 89) class and implements a memory
(p. 328) stream (p. 340).
This class can be used to read/write on the allocated memory (p. 328).
Construct a memoryStream (p. 334) object and attach a memory (p. 328) object to it.
The attached memory (p. 328) object will be resized if new data is written and its size
is too small.
Parameters:
memoryStream (p. 334) the memory (p. 328) object to be used by the memoryS-
tream (p. 334) object.
The documentation for this class was generated from the following files:
• memoryStream.h
• memoryStream.cpp
puntoexe::baseObject
puntoexe::baseStream
puntoexe::nullStream
This class derives from the baseStream (p. 89) class and implements a null stream
(p. 340).
The null stream (p. 340) doesn’t write or read anything: it’s just used to update the
position counter. The null stream (p. 340) can be used to calculate the tags offsets
before they are written to the definitive stream (p. 340).
The documentation for this class was generated from the following file:
• nullStream.h
• ptr< objectType > & operator= (const ptr< objectType > &ptrSource)
Copy the object tracked by another ptr (p. 336).
This class must be used to allocate objects derived from the class baseObject (p. 85).
The object type specified in the template will be deleted by this class when the object’s
reference counter reaches zero.
The references counter is managed automatically by this class.
Examples:
Default constructor.
Set the internal pointer to null.
Construct the ptr (p. 336) object and keeps track of the object referenced by the pointer
pObject.
Parameters:
pObject a pointer to the allocated object. The allocated object will be automati-
cally released by the class’ destructor.
The object must be allocated by the C++ new statement.
The object’s reference counter is increased by this function.
Copy constructor.
The object tracked by another ptr (p. 336) is copied into the current ptr (p. 336) and
the reference counter is increased.
Parameters:
ptrSource the source ptr (p. 336) object that must be copied into the current ptr
(p. 336).
Returns:
the pointer to the tracked object
Return the pointer to the tracked object, type casted in the specified class pointer.
The cast is static, so its validity is checked at compile time.
Returns:
the pointer to the tracked object
Return a new ptr (p. 336) object tracking the object tracked by this ptr (p. 336). A type
cast is performed if necessary.
The type cast is static, so its validity is checked at compile time.
Returns:
the pointer to the tracked object
Returns:
the pointer to the tracked object
Parameters:
ptrSource the ptr (p. 336) object that is currently tracking the object to be tracked
by this ptr (p. 336) object. The reference counter of the new object is in-
creased. The object previously tracked by this ptr (p. 336) is released.
Returns:
a reference to the ptr (p. 336) object.
Compare the pointer to the tracked object with the pointer tracked by another ptr
(p. 336).
Parameters:
ptrCompare the ptr (p. 336) tracking the object to be compared
Returns:
true if the ptrCompare pointer is equal to the pointer of the tracked object
Compare the pointer to the tracked object with the pointer specified in the parameter.
Parameters:
ptrCompare the pointer to be compared with the pointer to the tracked object
Returns:
true if the ptrCompare pointer is equal to the pointer of the tracked object
The documentation for this class was generated from the following file:
• baseObject.h
puntoexe::baseObject
puntoexe::baseStream
puntoexe::stream
This class derives from the baseStream (p. 89) class and implements a file stream
(p. 340).
This class can be used to read/write on physical files in the mass storage.
Examples:
Open a file.
The function uses the standard library function fopen to open the specified file.
The created file object will be automatically closed and destroyed when one of the
following events will occur:
Parameters:
fileName the name of the file to be opened
mode the opening mode. Can be the combination of one or more of the following
values:
• ios_base::in the file will be opened for reading operations
• ios_base::out the file will be opened for writing operations
• ios_base::app the writing operations will append data to the existing file
• ios_base::trunc the existing file will be truncated to zero length
• ios_base::binary the file will be opened in binary mode. Please note
that this flag is useless, since all the files ARE OPENED IN BINARY
MODE.
The documentation for this class was generated from the following files:
• stream.h
• stream.cpp
puntoexe::baseObject
puntoexe::streamController
puntoexe::streamReader puntoexe::streamWriter
• imbxUint32 position ()
Get the stream’s position relative to the virtual start position specified in the construc-
tor.
• imbxUint32 getControlledStreamPosition ()
Return the position in bytes from the beginning of the stream (p. 340).
Public Attributes
• bool m_bJpegTags
true writeByte() must write all 0xff as 0xff, 0x00 anf readByte() as to convert all
0xff,0x00 to 0xff, as in jpeg streams.
Protected Attributes
• ptr< baseStream > m_pControlledStream
Stream controlled by the stream (p. 340) controller.
• imbxUint32 m_virtualStart
Byte in the stream (p. 340) that represents the byte 0 in the stream (p. 340) controller.
• imbxUint32 m_virtualLength
Max number of bytes that the stream (p. 340) controller can control in the controlled
stream (p. 340). An EOF signal will be raised when trying to read past the maximum
length.
Byte ordering
This class represents a stream (p. 340) controller. A stream (p. 340) controller can
read or write data from/to a stream (p. 340).
Do not use this class directly: use puntoexe::streamWriter (p. 359) or pun-
toexe::streamReader (p. 354) instead.
Enumerator:
lowByteEndian the byte ordering is low endian: the least significant bytes of a
word are stored first
highByteEndian the byte ordering is high endian: the most significant bytes of a
word are stored first
Construct the stream (p. 340) controller and connect it to a stream (p. 340).
The stream (p. 340) controller can be used to control only a portion of the connected
stream (p. 340).
Parameters:
pControlledStream pointer to the controlled stream (p. 340)
virtualStart position in the stream (p. 340) that is considered as the position 0 by
the stream (p. 340) controller
virtualLength the number of bytes in the connected stream (p. 340) that the con-
troller will use. An EOF will be issued if the application tries to read beyond
the virtual length
Parameters:
pBuffer a pointer to the buffer that stores the data to order
wordLength the size, in bytes, of the elements stored in the buffer pointed by
pBuffer. E.g.: if the buffer stores a collection of words, this parameter will
be 2. If the buffer stores a collection of double words, then this parameter
will be 4.
endianType the desidered byte ordering. If it differs from the platform’s byte
ordering, then the content of the memory (p. 328) pointed by pBuffer will be
modified.
words The number of elements stored in the buffer pointed by pBuffer. This value
represents the number of element that will be byte ordered. The total size of
the buffer should be equal to words∗wordLength
Returns:
a pointer to the controlled stream (p. 340)
Return the position in bytes from the beginning of the stream (p. 340).
It acts like the function position() (p. 345), but it doesn’t adjust the position to the
virtual stream (p. 340) position specified in the constructor.
Returns:
the stream’s read position, in bytes from the beginning of the stream (p. 340)
Get the stream’s position relative to the virtual start position specified in the constructor.
The position is measured in bytes from the beginning of the stream (p. 340).
The position represents the byte in the stream (p. 340) that the next reading or writing
function will use.
If the virtual start position has been set in the constructor, then the returned position is
relative to the virtual start position.
Returns:
the stream’s read position, in bytes from the beginning of the stream (p. 340) or
the virtual start position set in the constructor
true writeByte() must write all 0xff as 0xff, 0x00 anf readByte() as to convert all
0xff,0x00 to 0xff, as in jpeg streams.
Max number of bytes that the stream (p. 340) controller can control in the controlled
stream (p. 340). An EOF signal will be raised when trying to read past the maximum
length.
If this value is 0 then there are no limits on the maximum length.
Byte in the stream (p. 340) that represents the byte 0 in the stream (p. 340) controller.
The documentation for this class was generated from the following files:
• streamController.h
• streamController.cpp
puntoexe::streamException
The base exception for all the exceptions thrown by the function in baseStream (p. 89).
The documentation for this class was generated from the following file:
• baseStream.h
puntoexe::streamException
puntoexe::streamExceptionClose
Exception thrown when there are problems during the closure of the stream (p. 340).
The documentation for this class was generated from the following file:
• baseStream.h
puntoexe::streamException
puntoexe::streamExceptionEOF
Exception thrown when an attempt to read past the end of the file is made.
The documentation for this class was generated from the following file:
• streamController.h
puntoexe::streamException
puntoexe::streamExceptionOpen
• baseStream.h
puntoexe::streamException
puntoexe::streamExceptionRead
• baseStream.h
puntoexe::streamException
puntoexe::streamExceptionWrite
• baseStream.h
puntoexe::streamException
puntoexe::streamJpegTagInStream
• streamReader.h
puntoexe::baseObject
puntoexe::streamController
puntoexe::streamReader
• bool endReached ()
Returns true if the last byte in the stream (p. 340) has already been read.
• imbxUint32 readBit ()
Read one bit from the stream (p. 340).
• void resetInBitsBuffer ()
Reset the bit pointer used by readBits() (p. 356), readBit() (p. 356) and addBit()
(p. 355).
• imbxUint8 readByte ()
Read a single byte from the stream (p. 340), parsing it if m_pTagByte is not zero.
Represents a stream (p. 340) reader. A stream (p. 340) reader can read data from a
stream (p. 340). Several stream (p. 340) readers can share a single baseStream (p. 89)
derived object.
The stream (p. 340) reader object is not multithread safe, but one single stream
(p. 340) can have several streamReaders (in several threads) connected to it.
A stream (p. 340) reader can also be connected only to a part of a stream (p. 340):
when this feature is used, the streamReaded’s client thinks that he is using a whole
stream (p. 340), while the reader limits its view to allowed stream’s bytes only.
Examples:
Builf a streamReader (p. 354) and connect it to an existing stream (p. 340).
The stream (p. 340) reader can also be connected to only a part of the stream (p. 340).
When the streamReader (p. 354) is connected to a part of a stream (p. 340) then all
the its functions will act on the viewable stream’s part only.
Parameters:
pControlledStream the stream (p. 340) that will be controlled by the reader
virtualStart the first stream’s byte visible to the reader
virtualLength the number of bytes visible to the reader. A value of 0 means that
all the bytes are visible
Read one bit from the stream (p. 340) and add its value to the specified buffer.
The buffer pointed by the pBuffer parameter is left-shifted before the read bit is inserted
in the least significant bit of the buffer.
The function throws a streamExceptionRead (p. 351) if an error occurs.
Parameters:
pBuffer a pointer to a imbxUint32 value that will be left shifted and filled with
the read bit.
Returns true if the last byte in the stream (p. 340) has already been read.
Returns:
true if the last byte in the stream (p. 340) has already been read
Parameters:
pBuffer a pointer to the buffer where the read data must be copied. the buffer’s
size must be at least equal to the size indicated in the bufferLength parameter.
bufferLength the number of bytes to read from the stream (p. 340).
Returns:
the value of the read bit (1 or 0)
Read the specified amount of bits from the stream (p. 340).
The functions uses a special bit pointer to keep track of the bytes that haven’t been
completly read.
The function throws a streamExceptionRead (p. 351) exception if an error occurs.
Parameters:
bitsNum the number of bits to read. The function can read 32 bits maximum
Returns:
an integer containing the fetched bits, right aligned
Read a single byte from the stream (p. 340), parsing it if m_pTagByte is not zero.
The read byte is stored in the buffer pointed by the parameter pBuffer.
If m_pTagByte is zero, then the function reads a byte and returns true.
If m_pTagByte is not zero, then the function skips all the bytes in the stream (p. 340)
that have the value 0xFF. If the function doesn’t have to skip any 0xFF bytes, then the
function just read a byte and returns true.
If one or more 0xFF bytes have been skipped, then the function returns a value depend-
ing on the byte that follows the 0xFF run:
• if the byte is 0, then the function fill the pBuffer parameter with a value 0xFF
and returns true
• if the byte is not 0, then that value is stored in the location pointed by m_-
pTagByte and the function returns false.
This mechanism is used to parse the jpeg tags in a stream (p. 340).
Returns:
the read byte
Reset the bit pointer used by readBits() (p. 356), readBit() (p. 356) and addBit()
(p. 355).
A subsequent call to readBits() (p. 356), readBit and addBit() (p. 355) will read data
from a byte-aligned boundary.
Parameters:
newPosition the new position to use for read operations, in bytes from the begin-
ning of the stream (p. 340) if bCurrent is false, or in bytes relative to the
current position if bCurrent is true
bCurrent when this parameter is true then the new read position is calculated by
adding the content of position to the current position, otherwise the parameter
position stores the new absolute position
The documentation for this class was generated from the following files:
• streamReader.h
• streamReader.cpp
puntoexe::baseObject
puntoexe::streamController
puntoexe::streamWriter
• void flushDataBuffer ()
Writes the internal buffer into the connected stream (p. 340). This function is auto-
matically called when needed, but your application can call it when syncronization
between the cached data and the stream (p. 340) is needed.
• void resetOutBitsBuffer ()
Reset the bit pointer used by writeBits() (p. 361).
Use this class to write into a baseStream (p. 89) derived class.
Like the streamReader (p. 354), this class is not multithread safe, but several
streamWriter (p. 359) (in several threads) can be connected to a single stream
(p. 340).
A streamWriter (p. 359) can also be connected only to a part of the original stream
(p. 340): when this feature is used then the streamWriter (p. 359) will act as if only
the visible bytes exist.
Examples:
dicom2jpeg/dicom2jpeg.cpp.
Creates the streamWriter (p. 359) and connects it to a baseStream (p. 89) object.
Parameters:
pControlledStream the stream (p. 340) used by the streamWriter (p. 359) to
write
virtualStart the first stream’s byte visible to the streamWriter (p. 359)
virtualLength the number of stream’s bytes visible to the streamWriter (p. 359).
Set to 0 to allow the streamWriter (p. 359) to see all the bytes
Flushes the internal buffer, disconnects the stream (p. 340) and destroys the
streamWriter (p. 359).
Writes the internal buffer into the connected stream (p. 340). This function is auto-
matically called when needed, but your application can call it when syncronization
between the cached data and the stream (p. 340) is needed.
Parameters:
pBuffer a pointer to the buffer which stores the data that must be written into the
stream (p. 340)
bufferLength the number of bytes that must be written to the stream (p. 340)
Parameters:
buffer bits to be written. The bits must be right aligned
bitsNum the number of bits to write. The function can write max 32 bits
Write a single byte to the stream (p. 340), parsing it if m_pTagByte is not zero.
The byte to be written must be stored in the buffer pointed by the parameter pBuffer.
If m_pTagByte is zero, then the function writes the byte and returns.
If m_pTagByte is not zero, then the function adds a byte with value 0x0 after all the
bytes with value 0xFF. This mechanism is used to avoid the generation of the jpeg tags
in a stream (p. 340).
Parameters:
buffer byte to be written
The documentation for this class was generated from the following files:
• streamWriter.h
• streamWriter.cpp
puntoexe::baseObject
puntoexe::thread
• thread ()
Construct the thread (p. 363).
• void start ()
Execute the function threadFunction() (p. 365) in a separate thread (p. 363).
• void terminate ()
Communicates to the thread (p. 363) that it should terminate as soon as possible.
• bool shouldTerminate ()
Returns true if the function threadFunction() (p. 365) should return as soon as pos-
sible.
• bool isRunning ()
Return true if the function threadFunction() (p. 365) is running in its own thread
(p. 363).
13.128.2.1 puntoexe::thread::thread ()
Returns:
an id for the currently active thread (p. 363)
Return true if the function threadFunction() (p. 365) is running in its own thread
(p. 363).
Returns:
true if the function threadFunction() (p. 365) is running in its own thread (p. 363)
Returns true if the function threadFunction() (p. 365) should return as soon as possi-
ble.
Returns:
true if the function threadFunction() (p. 365) should return as soon as possible
Execute the function threadFunction() (p. 365) in a separate thread (p. 363).
Communicates to the thread (p. 363) that it should terminate as soon as possible.
A call to shouldTerminate() (p. 365) returns true after this function has been called.
This function is executed in another thread (p. 363) when start() (p. 365) is called.
The code in this function can call shouldTerminate() (p. 365) to know when another
thread (p. 363) has requested its termination.
This function has to be implemented in a derived class.
• thread.h
• thread.cpp
puntoexe::threadException
puntoexe::threadExceptionAlreadyRunning
This is used as the base class for the exceptions thrown by the class thread (p. 363).
The documentation for this class was generated from the following file:
• thread.h
13.130 puntoexe::threadExceptionAlreadyRunning
Class Reference
Exception thrown by thread (p. 363) when an attempt to run an already running thread
(p. 363) is made.
#include <thread.h>
Inheritance diagram for puntoexe::threadExceptionAlreadyRunning::
puntoexe::threadException
puntoexe::threadExceptionAlreadyRunning
Exception thrown by thread (p. 363) when an attempt to run an already running thread
(p. 363) is made.
The documentation for this class was generated from the following file:
• thread.h
File Documentation
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::ptr< objectType >
This class must be used to allocate objects derived from the class baseObject (p. 85).
• class puntoexe::baseObject
This is the base class of the library. Almost all the classes in the library are derived
from this one.
• class puntoexe::lockObject
Locks the access to an object of type baseObject (p. 85).
• class puntoexe::lockMultipleObjects
Locks the access to several objects of type baseObject (p. 85).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Declaration of the base classes used by the puntoexe (p. 67) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::baseStream
This class represents a stream (p. 340).
• class puntoexe::streamException
The base exception for all the exceptions thrown by the function in baseStream (p. 89).
• class puntoexe::streamExceptionOpen
Exception thrown when the stream (p. 340) cannot be open.
• class puntoexe::streamExceptionRead
Exception thrown when there is an error during the read phase.
• class puntoexe::streamExceptionWrite
Exception thrown when there is an error during the write phase.
• class puntoexe::streamExceptionClose
Exception thrown when there are problems during the closure of the stream (p. 340).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Declaration of the the base class for the streams (memory, file, ...) used by the puntoexe
(p. 67) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::buffer
This class manages a memory (p. 328) area containing data (p. 139) in dicom format.
• class puntoexe::imebra::bufferException
This is the base class for the exceptions thrown by the buffer (p. 107) class.
• class puntoexe::imebra::bufferExceptionUnknownType
This exception is throw by the buffer (p. 107) when an handler for an unknown data
(p. 139) type is asked.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::charsetConversionException
Base class for the exceptions thrown by charsetConversion.
• class puntoexe::charsetConversionExceptionNoTable
Exception thrown when the requested charset is not supported by the DICOM stan-
dard.
• class puntoexe::charsetConversionExceptionNoSupportedTable
Exception thrown when the requested charset is not supported by the system.
• class puntoexe::charsetConversionExceptionUtfSizeNotSupported
Exception thrown when the system doesn’t have a supported size for wchar_t.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Implementation of the basic class for the classes that handles the charsets.
Classes
• class puntoexe::imebra::charsetsList::charsetsListException
This is the base class for the exceptions thrown by the class charsetsList.
• class puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault
This exception is thrown when a conversion from an unicode string causes the dicom
dataSet (p. 155) to change its default charset.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Typedefs
• typedef std::list< std::wstring > puntoexe::imebra::charsetsList::tCharsetsList
Declaration of the the base class for the classes that need to be aware of the Dicom
charsets.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Classes
• class puntoexe::imebra::codecs::codec
This is the base class for all the imebra (p. 71) codecs (p. 75).
• class puntoexe::imebra::codecs::codecException
This is the base class for the exceptions thrown by the codec (p. 117) derived classes.
• class puntoexe::imebra::codecs::codecExceptionWrongFormat
This exception is thrown when the file being parsed is not valid for the codec (p. 117).
• class puntoexe::imebra::codecs::codecExceptionCorruptedFile
This exception is thrown when the file being parsed is corrupted.
• class puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax
This exception is thrown when the transfer syntax is not recognized by the codec
(p. 117).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Classes
• class puntoexe::imebra::codecs::codecFactory
This class maintains a list of the available codecs (p. 75).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Declaration of the class used to retrieve the codec able to handle the requested transfer
syntax.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::colorTransform
This is the base class used by the color transforms (p. 79) classes.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Declaration of the class used to retrieve a color transform able to handle the requested
color spaces.
#include <list>
#include "colorTransform.h"
Classes
• class puntoexe::imebra::transforms::colorTransforms::colorTransformsFactory
This class maintains a list of all the available colorTransform (p. 251) classes and
retrieve the most appropriate transform (p. 285) class (or classes) when a color space
conversion is needed.
• class puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryException
This is the base class for the exceptions thrown by colorTransformsFactory (p. 253).
• class puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExceptionNoTransform
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Declaration of the class used to retrieve a color transform able to handle the requested
color spaces.
Typedefs
• typedef unsigned char imbxUint8
This type represents an 1 byte unsigned integer.
Declaration of the basic data types and of the platform flags (Posix or Windows).
Examples:
dicomdirItems/dicomdirItems.cpp.
Examples:
dicom2jpeg/dicom2jpeg.cpp.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::criticalSection
This class represents a critical section.
• class puntoexe::lockCriticalSection
This class locks a critical section in the constructor and unlocks it in the destructor.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::data
Represents a single Dicom Tag.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::dataCollectionIterator< collectionType >
This class accesses to all the data stored in a dataCollection (p. 145) derived class
(dataGroup (p. 150) or dataSet (p. 155)).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Declaration of the base class used by the dataSet and the dataGroup classes.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::dataGroup
Represents a Dicom group which stores a group of Dicom tags.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandler
This is the base class for all the imebra (p. 71) data (p. 139) handlers (p. 77).
A data (p. 139) handler allows to read/write the data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) object without worrying about the data format.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerDate
This data handler is returned by the class buffer (p. 107) when the application wants
to deal with a dicom tag of type "DA" (date).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Declaration of the data handler able to handle the dicom tags of type "DA" (date).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerDateTimeBase
This class is used as base class by the handlers (p. 77) that manage the date and the
time.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerNumeric< dataHandler-
Type >
This data (p. 139) handler accesses to the numeric data (p. 139) stored in a pun-
toexe::imebra::buffer (p. 107) class.
• class puntoexe::imebra::handlers::dataHandlerRaw
A dataHandlerRaw (p. 216) always "sees" the data (p. 139) as a collection of bytes,
no matter what the Dicom data (p. 139) type is.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerString
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringAE
Handles the Dicom data (p. 139) type "AE" (application entity.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringAS
Handles the Dicom data (p. 139) type "AS" (age string).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringCS
Handles the Dicom data (p. 139) type "CS" (code string).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringDS
Handles the Dicom type "DS" (decimal string).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringIS
Handles the Dicom type "IS" (integer string).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringPN
Handles the Dicom type "PN" (person name).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Implementation of the base class used by the string handlers that need to handle several
charsets.
Classes
• class puntoexe::imebra::handlers::dataHandlerStringUnicode
This is the base class for all the data (p. 139) handlers (p. 77) that manage strings
that need to be converted from different unicode charsets.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Declaration of the base class used by the string handlers that need to work with different
charsets.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Classes
• class puntoexe::imebra::handlers::dataHandlerTime
This data handler is returned by the class buffer (p. 107) when the application wants
to deal with a dicom tag of type "TM" (time).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::dataSet
A data (p. 139) set is a collection of groups of tags (see dataGroup (p. 150)).
• class puntoexe::imebra::dataSetException
This is the base class for the exceptions thrown by the dataSet (p. 155).
• class puntoexe::imebra::dataSetExceptionDifferentFormat
This exception is thrown when the application is trying to store an image (p. 232) in
the dataSet (p. 155) but the dataSet (p. 155) already stores other images that have
different attributes.
• class puntoexe::imebra::dataSetExceptionUnknownTransferSyntax
This exception is thrown when an unknown transfer syntax is being used while reading
or writing a stream (p. 340).
• class puntoexe::imebra::dataSetExceptionWrongFrame
This exception is thrown when the application is storing several images in the dataSet
(p. 155) but doesn’t store them in the right order.
• class puntoexe::imebra::dataSetExceptionOldFormat
This exception is thrown when the application is trying to store an image (p. 232) in
an old Dicom format.
• class puntoexe::imebra::dataSetImageDoesntExist
This exception is thrown when the an image (p. 232) that doesn’t exist is requested.
• class puntoexe::imebra::dataSetCorruptedOffsetTable
This exception is thrown when the basic offset table is corrupted.
Namespaces
• namespace puntoexe
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Classes
• class puntoexe::imebra::codecs::dicomCodec
The Dicom codec (p. 117).
• class puntoexe::imebra::codecs::dicomCodecException
This is the base class for the exceptions thrown by the dicom codec (p. 117) (dicom-
Codec (p. 131)).
• class puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached
This exception is thrown when dicomCodec::parseStream (p. 132) reaches the maxi-
mum depth for embedded datasets.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Defines
• #define IMEBRA_DATASET_MAX_DEPTH 16
Max number of datasets embedded into each others.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::dicomDictionary
The Dicom Dictionary.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Declaration of the classes that parse/create a DICOMDIR structure (dicomDir and di-
rectoryRecord).
#include "../../base/include/baseObject.h"
#include <string>
Classes
• class puntoexe::imebra::directoryRecord
directoryRecord (p. 190) represents a single record in a DICOMDIR structure (see
dicomDir (p. 183)).
• class puntoexe::imebra::dicomDir
A dicomDir (p. 183) object contains the information about the tree structure of a
DICOMDIR dataset.
• class puntoexe::imebra::dicomDirException
Base class from which the exceptions thrown by directoryRecord (p. 190) and di-
comDir (p. 183) derive.
• class puntoexe::imebra::dicomDirCircularReferenceException
This exception is thrown when a call to dicomDir::setFirstRootRecord()
(p. 185) or directoryRecord::setNextRecord() (p. 193) or di-
rectoryRecord::setFirstChildRecord() (p. 193) or directo-
ryRecord::setReferencedRecord() (p. 193) causes a circular reference between
directoryRecord (p. 190) objects.
• class puntoexe::imebra::dicomDirUnknownDirectoryRecordType
Exception thrown when an unknown record type is detected in directo-
ryRecord::getType() (p. 193), directoryRecord::getTypeString() (p. 193), directo-
ryRecord::setType() (p. 194) or directoryRecord::setTypeString() (p. 194).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Declaration of the classes that parse/create a DICOMDIR structure (dicomDir and di-
rectoryRecord).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::drawBitmap
This transform (p. 285) takes an image (p. 232) as an input and returns an 8 bit RGB
bitmap of the requested image’s area; the image’s area is expanded or reduced to fit
into the destination bitmap’s size.
• class puntoexe::imebra::transforms::drawBitmapException
Base class used for the exceptions thrown by drawBitmap (p. 275).
• class puntoexe::imebra::transforms::drawBitmapExceptionDataSetNotDeclared
This exception is thrown by declareInputImage() if the dataSet (p. 155) hasn’t been
declared yet.
• class puntoexe::imebra::transforms::drawBitmapExceptionImageNotDeclared
This exception is thrown by doTransform() if the image (p. 232) hasn’t been declared
yet.
• class puntoexe::imebra::transforms::drawBitmapExceptionInvalidArea
This exception is thrown by declareBitmapType() if the image’s area that has to be
generated is not valid.
• class puntoexe::imebra::transforms::drawBitmapExceptionInvalidAlignByte
This exception is thrown by declareBitmapType() if the align byte is illegal (1, 2 and
4 are the typical values).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::exceptionInfo
This class is used to store the information related to the points where the exceptions
are being caught&thrown.
• class puntoexe::exceptionsManager
One statically allocated instance of this class logs the stack positions while an excep-
tion is being processed.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Defines
• #define PUNTOEXE_FUNCTION_START(functionName)
Initialize a try block. The try block must be matched by a call to the PUNTOEXE_-
FUNCTION_END() (p. 453) macro.
• #define PUNTOEXE_FUNCTION_END()
Insert a catch block that rethrows the catched exception and log the function’s name
and the position in the source file in which the exception has been catched and
rethrown.
• #define PUNTOEXE_RETHROW(what)
Rethrow an exception caught by a catch block and add some descriptions to it.
Defines the classes and the macros used to handle the exceptions in the library.
Value:
}\
catch(std::exception& e)\
{\
puntoexe::exceptionInfo info(_puntoexe_function_name, __FILE__, _
_LINE__, typeid(e).name(), e.what());\
puntoexe::exceptionsManager::addExceptionInfo(info);\
throw;\
}\
catch(...)\
{\
puntoexe::exceptionInfo info(_puntoexe_function_name, __FILE__, _
_LINE__, "unknown", "");\
puntoexe::exceptionsManager::addExceptionInfo(info);\
throw;\
}
Insert a catch block that rethrows the catched exception and log the function’s name and
the position in the source file in which the exception has been catched and rethrown.
This function must be placed at the end of a function if the PUNTOEXE_-
FUNCTION_START() (p. 453) has been used in the function.
Value:
Initialize a try block. The try block must be matched by a call to the PUNTOEXE_-
FUNCTION_END() (p. 453) macro.
Parameters:
functionName the name of the function in which the macro is placed.
Value:
{\
puntoexe::exceptionInfo info(_puntoexe_function_name, __FILE__, _
_LINE__, "rethrowing", what);\
puntoexe::exceptionsManager::addExceptionInfo(info);\
throw;\
}
Rethrow an exception caught by a catch block and add some descriptions to it.
This macro can be used only in the functions or blocks that use the macros
PUNTOEXE_FUNCTION_START() (p. 453) and PUNTOEXE_FUNCTION_-
END() (p. 453).
Parameters:
what a message to be associated with the exception
Value:
{\
exceptionType e(what);\
puntoexe::exceptionInfo info(_puntoexe_function_name, __FILE__, _
_LINE__, typeid(e).name(), what);\
puntoexe::exceptionsManager::addExceptionInfo(info);\
throw e;\
}
Throw an exception of the specified type and log the function’s name and the position
in the file on which the exception has been thrown.
This macro can be used only in the functions or blocks that use the macros
PUNTOEXE_FUNCTION_START() (p. 453) and PUNTOEXE_FUNCTION_-
END() (p. 453).
Parameters:
exceptionType the type of exception to throw
what a message to be associated with the exception
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::huffmanTable
This class calculates the huffman table from a set of values and their frequency, and
can read or write huffman codes from/to a baseStream (p. 89) object.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::image
Represents a single image (p. 232) of a dicom data (p. 139) set.
• class puntoexe::imebra::imageException
This is the base class for the exceptions thrown by the image (p. 232) class.
• class puntoexe::imebra::imageExceptionUnknownDepth
This exception is thrown when an unknown depth is specified as a parameter.
• class puntoexe::imebra::imageExceptionUnknownColorSpace
This exception is thrown when an unknown color space is specified in the function
create().
• class puntoexe::imebra::imageExceptionInvalidSize
This exception is thrown when an invalid size in pixels is specified in the function
create().
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Typedefs
• typedef dataHandlerNumeric< imbxInt32 > pun-
toexe::imebra::handlers::imageHandler
Represents an handler specialized to work with the image (p. 232) data (p. 139).
Includes all the headers needed to build an application that uses imebra.
#include "buffer.h"
#include "codec.h"
#include "codecFactory.h"
#include "colorTransform.h"
#include "colorTransformsFactory.h"
#include "data.h"
#include "dataGroup.h"
#include "dataHandlerDate.h"
#include "dataHandlerDateTime.h"
#include "dataHandlerNumeric.h"
#include "dataHandlerStringAE.h"
#include "dataHandlerStringAS.h"
#include "dataHandlerStringCS.h"
#include "dataHandlerStringDS.h"
#include "dataHandlerStringIS.h"
#include "dataHandlerStringLO.h"
#include "dataHandlerStringLT.h"
#include "dataHandlerStringPN.h"
#include "dataHandlerStringSH.h"
#include "dataHandlerStringST.h"
#include "dataHandlerStringUI.h"
#include "dataHandlerStringUT.h"
#include "dataHandlerTime.h"
#include "dataSet.h"
#include "dicomCodec.h"
#include "dicomDir.h"
#include "dicomDict.h"
#include "image.h"
#include "waveform.h"
#include "jpegCodec.h"
#include "LUT.h"
#include "modalityVOILUT.h"
#include "MONOCHROME1ToMONOCHROME2.h"
#include "MONOCHROME1ToRGB.h"
#include "MONOCHROME2ToRGB.h"
#include "MONOCHROME2ToYBRFULL.h"
#include "PALETTECOLORToRGB.h"
#include "RGBToMONOCHROME2.h"
#include "RGBToPALETTECOLOR.h"
#include "RGBToYBRFULL.h"
#include "RGBToYBRPARTIAL.h"
#include "transform.h"
#include "transformBuffers.h"
#include "transformHighBit.h"
#include "transformsChain.h"
#include "VOILUT.h"
#include "YBRFULLToMONOCHROME2.h"
#include "YBRFULLToRGB.h"
#include "YBRPARTIALToRGB.h"
#include "transaction.h"
#include "drawBitmap.h"
#include "../../base/include/baseObject.h"
#include "../../base/include/baseStream.h"
#include "../../base/include/configuration.h"
#include "../../base/include/exception.h"
#include "../../base/include/huffmanTable.h"
#include "../../base/include/memory.h"
#include "../../base/include/memoryStream.h"
#include "../../base/include/stream.h"
#include "../../base/include/nullStream.h"
#include "../../base/include/streamReader.h"
#include "../../base/include/streamWriter.h"
#include "../../base/include/charsetConversion.h"
#include "../../base/include/thread.h"
#include "../../base/include/criticalSection.h"
Includes all the headers needed to build an application that uses imebra.
Please note that the file doesn’t include the file viewHelper.h (p. 517).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Classes
• class puntoexe::imebra::codecs::jpegCodec
The Jpeg codec (p. 117).
• class puntoexe::imebra::codecs::jpegCodecException
Base class for the exceptions thrown by the jpeg codec (p. 117).
• class puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax
Exception thrown when the jpeg variant cannot be handled.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::codecs
This namespace is used to define the classes that implement a codec (p. 117) and their
helper classes.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::lut
Represents a Lookup table (LUT).
• class puntoexe::imebra::lutException
This is the base class for the exceptions thrown by the lut (p. 241) class.
• class puntoexe::imebra::lutExceptionWrongIndex
This exception is thrown by the lut (p. 241) class when the wrong index or id is speci-
fied as a parameter.
• class puntoexe::imebra::lutExceptionCorrupted
This exception is thrown by the lut (p. 241) class when the the LUT information is
corrupted.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::memory
This class is used to supply a reference counter to a string of bytes.
• class puntoexe::memoryPool
Stores unused memory (p. 328) objects (see puntoexe::memory (p. 328)) so they can
be reused when needed.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::memoryStream
This class derives from the baseStream (p. 89) class and implements a memory
(p. 328) stream (p. 340).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::modalityVOILUT
This class transforms (p. 79) the pixel values of the image (p. 232) retrieved from the
dataset into values that are meaningful to th application.
• class puntoexe::imebra::transforms::modalityVOILUTInverse
Executes the inverse modality VOI/LUT transformation (see modalityVOILUT
(p. 283)).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
14.93 MONOCHROME1ToMONOCHROME2.cpp
File Reference
Implementation of the classes for conversion between 2 monochrome color spaces.
#include "../../base/include/exception.h"
#include "../include/MONOCHROME1ToMONOCHROME2.h"
#include "../include/dataHandler.h"
#include "../include/dataSet.h"
#include "../include/image.h"
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOCHROME2
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space MONOCHROME2.
• class puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToMONOCHROME1
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space MONOCHROME1.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB
Transforms an image (p. 232) from the colorspace MONOCHROME1 into the color
space RGB.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space RGB.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFULL
Transforms an image (p. 232) from the colorspace MONOCHROME2 into the color
space YBR_FULL.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::nullStream
This class derives from the baseStream (p. 89) class and implements a null stream
(p. 340).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB
Transforms an image (p. 232) from the colorspace PALETTE COLOR into the color
space RGB.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2
Transforms an image (p. 232) from the colorspace RGB into the color space
MONOCHROME2.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::RGBToPALETTECOLOR
Transforms an image (p. 232) from the colorspace RGB into the color space
PALETTE COLOR.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
FULL.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL
Transforms an image (p. 232) from the colorspace RGB into the color space YBR_-
PARTIAL.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::stream
This class derives from the baseStream (p. 89) class and implements a file stream
(p. 340).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::streamController
This class represents a stream (p. 340) controller. A stream (p. 340) controller can
read or write data from/to a stream (p. 340).
• class puntoexe::streamExceptionEOF
Exception thrown when an attempt to read past the end of the file is made.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::streamJpegTagInStream
Exception thrown when a jpeg tag is found but wasn’t expected.
• class puntoexe::streamReader
Represents a stream (p. 340) reader. A stream (p. 340) reader can read data from
a stream (p. 340). Several stream (p. 340) readers can share a single baseStream
(p. 89) derived object.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::streamWriter
Use this class to write into a baseStream (p. 89) derived class.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Classes
• class puntoexe::thread
This class represents a thread (p. 363).
• class puntoexe::threadException
This is used as the base class for the exceptions thrown by the class thread (p. 363).
• class puntoexe::threadExceptionAlreadyRunning
Exception thrown by thread (p. 363) when an attempt to run an already running
thread (p. 363) is made.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::transaction
Represents a single transaction (p. 249).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Defines
• #define IMEBRA_COMMIT_TRANSACTION_START()
Start a committing transaction block.
• #define IMEBRA_TRANSACTION_START()
Start a non-committing transaction block.
• #define IMEBRA_TRANSACTION_END()
Terminates a transaction block initiated by IMEBRA_COMMIT_TRANSACTION_-
START() (p. 505) or IMEBRA_TRANSACTION_START() (p. 506).
Delete the modifications made in the transaction’s block before this macro is called.
Declaration of the classes that allow to use the transactions on the writing handlers (see
dataHandler).
Value:
{\
PUNTOEXE_FUNCTION_START(L"Imebra Commit Transaction");\
puntoexe::imebra::transaction imebraNestedTransaction(true);\
try{
Delete the modifications made in the transaction’s block before this macro is called.
This macro is called by IMEBRA_TRANSACTION_END() (p. 505) in case an un-
caught exception is detected.
Value:
}\
catch(...)\
{\
imebraNestedTransaction.abort();\
PUNTOEXE_RETHROW("Transaction aborted");\
}\
PUNTOEXE_FUNCTION_END();\
}
Value:
{\
PUNTOEXE_FUNCTION_START(L"Imebra Transaction");\
puntoexe::imebra::transaction imebraNestedTransaction(false);\
try{
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::transform
This is the base class for the transforms (p. 79).
• class puntoexe::imebra::transforms::transformException
This is the base class of the exceptions thrown by the classes derived from transform
(p. 285).
• class puntoexe::imebra::transforms::transformExceptionDataSetNotDefined
This exception is thrown by the transforms (p. 79) that need a defined dataSet (p. 155)
(see declareDataSet()) but don’t have any.
• class puntoexe::imebra::transforms::transformExceptionDataInputImageDefined
This exception is thrown by a transforms (p. 79) when an input image (p. 232) is
required but hasn’t been defined (see declareInputImage()).
• class puntoexe::imebra::transforms::transformExceptionOutputImageNotDefined
This exception is thrown by a transforms (p. 79) when an output image (p. 232) is
required but hasn’t been defined (see declareOutputImage()).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::transformBuffers
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels.
• class puntoexe::imebra::transforms::transformBuffersInputOutput
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and need two different buffers (one for the input image (p. 232) and one for the
outpu image (p. 232)).
• class puntoexe::imebra::transforms::transformBuffersInPlace
This class is used as a base class by some transforms (p. 79) that work on the image’s
pixels and don’t need two different buffers (input & output) but can work on a single
buffer (p. 107) that contains the input and output data (p. 139).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::transformHighBit
Shift the image’s content to adapt it to the specified high bit.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::transformsChain
Executes a sequence of transforms (p. 79).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::view
This class can be used as a base class by the windows that need to display a Dicom
image (p. 232).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Declaration of the a class that help a view or window class to draw a dicom image on
the screen.
This file is not included automatically by imebra.h (p. 461)
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Classes
• class puntoexe::imebra::transforms::VOILUT
Transform the value of the input image’s pixels by using the presentation VOI/LUT
defined in the dataSet (p. 155).
• class puntoexe::imebra::transforms::VOILUTInverse
Execute the inverse of the transformation executed by VOILUT (p. 300).
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
Classes
• class puntoexe::imebra::waveform
Represents a single waveform (p. 319) of a dicom dataset.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::handlers
All the data (p. 139) handlers (p. 77) returned by the class buffer (p. 107) are defined
in this namespace.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
MONOCHROME2.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB
Transforms an image (p. 232) from the colorspace YBR_FULL into the color space
RGB.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Classes
• class puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB
Transforms an image (p. 232) from the colorspace YBR_PARTIAL into the color space
RGB.
Namespaces
• namespace puntoexe
The base services and classes are defined in this namespace.
• namespace puntoexe::imebra
All the functions related to the dicom standard are defined in this namespace.
• namespace puntoexe::imebra::transforms
This namespace contains all the transforms (p. 79) of the imebra (p. 71) library.
• namespace puntoexe::imebra::transforms::colorTransforms
This namespace contains all the classes involved in the transformation between sev-
eral color spaces.
Example Documentation
15.1 dicom2jpeg/dicom2jpeg.cpp
This application converts dicom file into one or more jpeg files, or into movies.
FFMPEG To convert dicom files into movies this application needs the open source
program ffmpeg, available for Windows and linux platforms.
Ffmpeg is not redistributed with Imebra and must be downloaded from here:
• http://ffmpeg.mplayerhq.hu/ (Linux)
• http://ffmpeg.arrozcru.org/ (Windows)
Usage
• mpegOptions: the list of options to be passed to ffmpeg, using the ffmpeg format.
The input file and the frame rate are added automatically by dicom2jpeg
Examples
The following command converts a dicom file named "input.dcm" to a jpeg file named
"output.jpg". If the file output.jpg already exists then it will be overwritten.
The following code converts a multiframe file named "multiframe.dcm" to several jpeg
files named "output.jpg", "output1.jpg", "output2.jpg", ..., "outputN.jpg" (N=number
of frames-1)
/*
Imebra v. 0.0.48
You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE Version
3
along with this program; If not, see http://www.gnu.org/licenses/
-------------------
If you want to use Imebra commercially then you have to buy the commercial
license available at http://puntoexe.com
After you buy the commercial license then you can use Imebra according
to the terms described in the Imebra Commercial License Version 1.
A copy of the Imebra Commercial License Version 1 is available in the
documentation pages.
*/
#include <iostream>
#include "../../imebra/include/imebra.h"
#include <sstream>
#ifdef PUNTOEXE_WINDOWS
#include <process.h>
#else
#include <spawn.h>
#include <sys/wait.h>
#endif
#include <memory>
#include <list>
try
{
if(argc < 3)
{
std::wcout <<
L"\
Usage: dicom2jpeg dicomFileName jpegFileName [-ffmpeg FFMPEGPATH FFMPEGOPT]\n\
\n\
dicomFileName = name of the dicom file\n\
jpegFileName = name of the final jpeg file\n\
-ffmpeg FFMPEGPATH = launches FFMPEG after generating the jpeg images.\n\
FFMPEGPATH is the path to FFMPEG and FFMPEGOPT\n\
are the options for ffmpeg.n\
The input images and the frame rate are\n\
added automatically to the options\
";
return 1;
}
{
extension = outputFileName.substr(dotPos);
outputFileName.erase(dotPos);
}
else
{
extension = ".jpg";
}
// Get a codec factory and let it use the right codec to create a
dataset
// from the input stream
ptr<codecs::codecFactory> codecsFactory(codecs::codecFactory::get
CodecFactory());
ptr<dataSet> loadedDataSet(codecsFactory->load(reader, 2048));
size_t framesCount(0);
try
{
// Scan through the frames
for(imbxUint32 frameNumber(0); ; ++frameNumber)
{
// Apply the modality VOI/LUT
ptr<transforms::modalityVOILUT> modVOILUT(new
transforms::modalityVOILUT);
modVOILUT->declareDataSet(loadedDataSet);
modVOILUT->declareInputImage(0, loadedDataSet->ge
tImage(frameNumber));
modVOILUT->doTransform();
ptr<image> finalImage(modVOILUT->getOutputImage(0
));
ptr<transforms::colorTransforms::colorTransformsFactory> colorFactory(transforms:
:colorTransforms::colorTransformsFactory::getColorTransformsFactory());
ptr<transforms::transform> colorTransform(colorFa
ctory->getTransform(finalImage->getColorSpace(), L"YBR_FULL"));
if(colorTransform != 0)
{
colorTransform->declareDataSet(loadedData
Set);
colorTransform->declareInputImage(0, fina
lImage);
colorTransform->doTransform();
finalImage = colorTransform->getOutputIma
ge(0);
}
++framesCount;
}
}
catch(dataSetImageDoesntExist&)
{
// Ignore this exception. It is thrown when we reach the
// end of the images list
exceptionsManager::getMessage();
}
// Launch ffmpeg
#ifdef PUNTOEXE_WINDOWS
return (int)_spawnvp(_P_WAIT , argv[ffmpegFlag + 1], ffArgv.get());
#else
char *environment[] = {0};
pid_t process_id;
posix_spawnp (&process_id, argv[ffmpegFlag + 1],
0, 0, (char* const*)ffArgv.get(), (char* const*)envir
onment);
wait(0);
#endif
return 0;
}
catch(...)
{
std::wcout << exceptionsManager::getMessage();
return 1;
}
}
15.2 dicomdirItems/dicomdirItems.cpp
This application reads a DICOMDIR file and output the file’s content in XML format
to the standard output stream.
Usage:
dicomdirItems dicomdirFile
• dicomdirFile: the name of the dicom file containing the DICOMDIR structure
In the generated XML file, all the information regarding the DICOMDIR structure is
enclosed in the root tag <dicomdir>.
Each DICOMDIR item is enclosed in the tag <record>, which has the attributes id
(unique numeric id) and type (could be "IMAGE", "SERIES", "PATIENT" and others.
See puntoexe::imebra::directoryRecord::tDirectoryRecordType (p. 191) for more
information).
A <record> item can include:
A <group> item has the attribute id which specifies the dicom group id in decimal
format. A <group> item may contain 0 or more <tag> items.
Each tag has the attribute id which specifies the tag id in decimal format.
The <tag> item contains the dicom tag’s content.
// dicomdirItems.cpp
//
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include "../../imebra/include/imebra.h"
//
// Convert a string to XML entities that can be safely
// embedded in a XML file
//
std::wstring xmlEntities(std::wstring value)
{
std::wostringstream outputStream;
for(std::wstring::iterator scanValue(value.begin()); scanValue != value.e
nd(); ++scanValue)
{
switch(*scanValue)
{
case L’"’:
outputStream << L""";
break;
case L’&’:
outputStream << L"&";
break;
case L’\’’:
outputStream << L"'";
break;
case L’<’:
outputStream << L"<";
break;
case ’>’:
outputStream << L">";
break;
default:
if(*scanValue < 33)
{
outputStream << L"&#" << (int)(*scanValue) << L";
";
break;
}
outputStream << *scanValue;
}
}
return outputStream.str();
}
//
// Output a tag from the dataset in an XML tag
//
void outputTag(ptr<dataSet> pDataSet, imbxUint16 group, imbxUint16 tag, std::wost
ream* pOutputStream, std::wstring tagName, imbxUint16 id = 0)
{
ptr<handlers::dataHandler> tagHandler(pDataSet->getDataHandler(group, 0,
tag, 0, false));
if(tagHandler == 0)
{
*pOutputStream << L"<" << tagName << L" />\n";
return;
}
{
if(bSeparator)
{
*pOutputStream << L"\\";
}
*pOutputStream << xmlEntities(tagHandler->getUnicodeString());
tagHandler->incPointer();
}
//
// Scan all the sibling records (and their children) of
// the specified one
//
void scanChildren(ptr<directoryRecord> pRecord, std::wostream* pOutputStream)
{
for(;pRecord != 0; pRecord = pRecord->getNextRecord())
{
ptr<dataSet> pRecordDataSet(pRecord->getRecordDataSet());
{
imbxUint16 id(scanTags->getId());
if(id == 0)
{
continue;
}
outputTag(pRecordDataSet, groupId, id, pOutputStr
eam, L"tag", id);
}
//
// Entry point
//
int main(int argc, char* argv[])
{
return 1;
}
// Get a codec factory and let it use the right codec to create a dataset
try
{
std::wcout << L"<dicomdir>";
scanChildren(directory->getFirstRootRecord(), &(std::wcout));
std::wcout << L"</dicomdir>";
return 0;
}
catch(...)
{
std::wcout << exceptionsManager::getMessage();
return 1;
}
}
∼criticalSection puntoexe::baseObject, 87
puntoexe::criticalSection, 95 baseObject.cpp, 365
∼lockCriticalSection baseObject.h, 366
puntoexe::lockCriticalSection, 321 baseStream.cpp, 367
∼lockMultipleObjects baseStream.h, 368
puntoexe::lockMultipleObjects, 323 belowMedium
∼lockObject puntoexe::imebra::codecs::codec,
puntoexe::lockObject, 324 119
∼streamWriter bitDepth
puntoexe::streamWriter, 357 puntoexe::imebra::image, 231
∼transaction buffer
puntoexe::imebra::transaction, 248 puntoexe::imebra::buffer, 108, 109
buffer.cpp, 369
abort buffer.h, 371
pun- bufferException
toexe::imebra::handlers::dataHandler, puntoexe::imebra::bufferException,
197 113
puntoexe::imebra::transaction, 248 bufferExceptionUnknownType
aboveMedium pun-
puntoexe::imebra::codecs::codec, toexe::imebra::bufferExceptionUnknownType,
119 114
addBit bufferExists
puntoexe::streamReader, 352 puntoexe::imebra::data, 140
addExceptionInfo buildDataSet
puntoexe::exceptionsManager, 101 puntoexe::imebra::dicomDir, 183
addTransform buildStream
pun- pun-
toexe::imebra::transforms::transformsChain,toexe::imebra::codecs::dicomCodec,
297 131
adjustEndian
puntoexe::streamController, 341 calcHuffmanCodesLength
appendDataSet puntoexe::huffmanTable, 104
puntoexe::imebra::data, 140 calcHuffmanTables
assign puntoexe::huffmanTable, 104
puntoexe::memory, 327 canHandleTransferSyntax
at puntoexe::imebra::codecs::codec,
pun- 119
canSubsample
toexe::imebra::handlers::dataHandlerNumeric,
211 pun-
toexe::imebra::transforms::colorTransforms::colorTransformsFactory,
baseObject 252
542 INDEX
188 getBackgroundColor
doTransform puntoexe::imebra::view, 308
pun- getBits
toexe::imebra::transforms::transform, puntoexe::imebra::lut, 241
285 getBitsAllocated
draw puntoexe::imebra::waveform, 318
puntoexe::imebra::view, 306 getBitsStored
drawBitmap puntoexe::imebra::waveform, 318
puntoexe::imebra::view, 306 getBufferSize
drawBitmap.cpp, 443 puntoexe::imebra::data, 141
drawBitmap.h, 444 getBufferSizeBytes
drawCursorLine puntoexe::imebra::buffer, 109
puntoexe::imebra::view, 307 getCenterWidth
drawRectangle pun-
puntoexe::imebra::view, 308 toexe::imebra::transforms::VOILUT,
299
empty getChannels
puntoexe::memory, 327 puntoexe::imebra::waveform, 318
encapsulated getChannelsNumber
puntoexe::imebra::codecs::codec, puntoexe::imebra::image, 232
120 getCharsetsList
endReached puntoexe::imebra::buffer, 109
puntoexe::streamReader, 353 getCodec
endTransformsChain pun-
pun- toexe::imebra::codecs::codecFactory,
toexe::imebra::transforms::transformsChain,129
297 getCodecFactory
exception.cpp, 446 pun-
exception.h, 447 toexe::imebra::codecs::codecFactory,
PUNTOEXE_FUNCTION_END, 129
448 getColorSpace
PUNTOEXE_FUNCTION_START, puntoexe::imebra::image, 232
448 getColorTransformsFactory
PUNTOEXE_RETHROW, 449 pun-
PUNTOEXE_THROW, 449 toexe::imebra::transforms::colorTransforms::colorTransfo
exceptionInfo 253
puntoexe::exceptionInfo, 98 getControlledStream
fillHandlers puntoexe::streamController, 341
puntoexe::imebra::lut, 241 getControlledStreamPosition
flush puntoexe::streamController, 342
puntoexe::memoryPool, 330 getData
flushDataBuffer pun-
puntoexe::streamWriter, 357 toexe::imebra::dataCollectionIterator,
148
get getDataHandler
puntoexe::ptr, 335 puntoexe::imebra::buffer, 110
getAge puntoexe::imebra::data, 141
pun- puntoexe::imebra::dataGroup, 151
toexe::imebra::handlers::dataHandlerStringAS,
puntoexe::imebra::dataSet, 157
218 puntoexe::imebra::image, 232
getDataHandlerRaw getFilePart
puntoexe::imebra::buffer, 110 puntoexe::imebra::directoryRecord,
puntoexe::imebra::data, 142 190
puntoexe::imebra::dataGroup, 151 getFinalColorSpace
puntoexe::imebra::dataSet, 158 pun-
getDataIterator toexe::imebra::transforms::colorTransforms::colorTransform,
puntoexe::imebra::dataCollection, 250
145 getFirstAvailFrameBufferId
getDataSet puntoexe::imebra::dataSet, 160
puntoexe::imebra::data, 143 getFirstChildRecord
pun- puntoexe::imebra::directoryRecord,
toexe::imebra::transforms::transform, 191
285 getFirstMapped
getDataType puntoexe::imebra::lut, 241
puntoexe::imebra::buffer, 111 getFirstRootRecord
puntoexe::imebra::data, 143 puntoexe::imebra::dicomDir, 184
puntoexe::imebra::dataGroup, 152 getFrameBufferId
puntoexe::imebra::dataSet, 159 puntoexe::imebra::dataSet, 160
pun- getFrameBufferIds
toexe::imebra::handlers::dataHandler, puntoexe::imebra::dataSet, 160
198 getFrameOffset
getDate puntoexe::imebra::dataSet, 161
pun- getGroup
toexe::imebra::handlers::dataHandler, puntoexe::imebra::dataSet, 161
198 getHighBit
getDefaultDataType puntoexe::imebra::image, 233
puntoexe::imebra::dataSet, 159 getId
getDepth pun-
puntoexe::imebra::image, 233 toexe::imebra::dataCollectionIterator,
getDescription 148
puntoexe::imebra::lut, 241 getImage
getDicomDictionary puntoexe::imebra::codecs::codec,
puntoexe::imebra::dicomDictionary, 120
180 puntoexe::imebra::dataSet, 162
getDirectoryDataSet puntoexe::imebra::view, 308
puntoexe::imebra::dicomDir, 184 getImageRect
getDouble puntoexe::imebra::view, 309
puntoexe::imebra::dataSet, 159 getInitialColorSpace
pun- pun-
toexe::imebra::handlers::dataHandler, toexe::imebra::transforms::colorTransforms::colorTransform,
199 250
pun- getInputImage
toexe::imebra::handlers::dataHandlerStringAS,
pun-
219 toexe::imebra::transforms::transform,
getDoubleIncPointer 285
pun- getIntegerData
toexe::imebra::handlers::dataHandler, puntoexe::imebra::waveform, 318
199 getInterpretation
getExceptionInfo puntoexe::imebra::waveform, 319
puntoexe::exceptionsManager, 101 getItemOffset
pun- 202
toexe::imebra::handlers::dataHandler,
getVOILUTDescription
201 pun-
getTag toexe::imebra::transforms::VOILUT,
puntoexe::imebra::dataGroup, 153 299
puntoexe::imebra::dataSet, 165 getVOILUTId
getTagName pun-
puntoexe::imebra::dicomDictionary, toexe::imebra::transforms::VOILUT,
180 299
getTagType getWaveform
puntoexe::imebra::dicomDictionary, puntoexe::imebra::dataSet, 167
181 GetWaveformItem
getThreadId puntoexe::imebra::waveform, 319
puntoexe::thread, 360 getWindowSize
getTransform puntoexe::imebra::view, 310
pun- getWordSize
toexe::imebra::transforms::colorTransforms::colorTransformsFactory,
puntoexe::imebra::dicomDictionary,
253 181
getType getZoomFactor
puntoexe::imebra::directoryRecord, puntoexe::imebra::view, 310
191
getTypeString high
puntoexe::imebra::directoryRecord, puntoexe::imebra::codecs::codec,
192 119
getUnicodeString highByteEndian
puntoexe::imebra::dataSet, 166 puntoexe::streamController, 340
pun- huffmanTable
toexe::imebra::handlers::dataHandler, puntoexe::huffmanTable, 104
201 huffmanTable.cpp, 451
pun- huffmanTable.h, 452
toexe::imebra::handlers::dataHandlerDate,
207 image.cpp, 453
pun- image.h, 454
imageException
toexe::imebra::handlers::dataHandlerTime,
228 puntoexe::imebra::imageException,
getUnitSize 235
pun- imageHandler
toexe::imebra::handlers::dataHandler, puntoexe::imebra::handlers, 78
201 imagePosToMillimitersX
getUnsignedLong puntoexe::imebra::view, 311
puntoexe::imebra::dataSet, 166 imagePosToMillimitersY
pun- puntoexe::imebra::view, 311
imbxInt16
toexe::imebra::handlers::dataHandler,
201 configuration.h, 385
pun- imbxInt32
configuration.h, 385
toexe::imebra::handlers::dataHandlerStringAS,
219 imbxInt8
getUnsignedLongIncPointer configuration.h, 385
pun- imbxUint16
toexe::imebra::handlers::dataHandler, configuration.h, 385
imbxUint32 pun-
configuration.h, 386 toexe::imebra::transforms::colorTransforms::colorTransfo
imbxUint8 254
configuration.h, 386 isSubsampledY
imebra.h, 456 pun-
IMEBRA_COMMIT_- toexe::imebra::transforms::colorTransforms::colorTransfo
TRANSACTION_START 254
transaction.h, 500 isValid
IMEBRA_DATASET_MAX_DEPTH pun-
dicomCodec.h, 438 toexe::imebra::dataCollectionIterator,
IMEBRA_TRANSACTION_ABORT 149
transaction.h, 500
IMEBRA_TRANSACTION_END jpegCodec.cpp, 459
transaction.h, 500 jpegCodec.h, 460
IMEBRA_TRANSACTION_START jpegCodecCannotHandleSyntax
transaction.h, 501 pun-
toexe::imebra::codecs::jpegCodecCannotHandleSyntax,
incIterator
137
pun-
toexe::imebra::dataCollectionIterator,
load
149
pun-
incPointer
toexe::imebra::codecs::codecFactory,
pun-
129
toexe::imebra::handlers::dataHandler,
lock
202
puntoexe::criticalSection, 96
incValueFreq lockCriticalSection
puntoexe::huffmanTable, 105 puntoexe::lockCriticalSection, 321
invalidate lockMultipleObjects
puntoexe::imebra::view, 311 puntoexe::lockMultipleObjects, 322
isAutoZoom lockObject
puntoexe::imebra::view, 312 puntoexe::lockObject, 324
isDataTypeValid low
puntoexe::imebra::dicomDictionary, puntoexe::imebra::codecs::codec,
181 119
isEmpty lowByteEndian
pun- puntoexe::streamController, 340
toexe::imebra::transforms::transform,
LUT.cpp, 461
286 LUT.h, 462
pun-
toexe::imebra::transforms::transformsChain,
m_bJpegTags
297 puntoexe::streamController, 342
isMonochrome m_dataBuffer
pun- puntoexe::streamController, 342
toexe::imebra::transforms::colorTransforms::colorTransformsFactory,
m_exceptionMessage
254 puntoexe::exceptionInfo, 98
isReferencedOnce m_exceptionType
puntoexe::baseObject, 87 puntoexe::exceptionInfo, 98
isRunning m_fileName
puntoexe::thread, 360 puntoexe::exceptionInfo, 98
isSubsampledX m_functionName
puntoexe::exceptionInfo, 98 pun-
m_lineNumber toexe::imebra::transforms::colorTransforms::colorTransformsFactory,
puntoexe::exceptionInfo, 98 255
m_pControlledStream nullStream.h, 477
puntoexe::streamController, 343
m_virtualLength openFile
puntoexe::streamController, 343 puntoexe::stream, 337
m_virtualStart operator destType ∗
puntoexe::streamController, 343 puntoexe::ptr, 335
makeSubsampled operator ptr< destType >
pun- puntoexe::ptr, 335
toexe::imebra::transforms::colorTransforms::colorTransformsFactory,
operator->
255 puntoexe::ptr, 335
mappedValue operator=
puntoexe::imebra::lut, 242 puntoexe::ptr, 335
mappedValueRev operator==
puntoexe::imebra::lut, 242 puntoexe::ptr, 336
medium operator[]
puntoexe::imebra::codecs::codec, pun-
119 toexe::imebra::handlers::dataHandlerNumeric,
memory.cpp, 463 213
memory.h, 464
memoryStream PALETTECOLORToRGB.cpp, 478
puntoexe::memoryStream, 331 PALETTECOLORToRGB.h, 479
memoryStream.cpp, 465 parseStream
memoryStream.h, 466 pun-
millimitersToImagePosX toexe::imebra::codecs::dicomCodec,
puntoexe::imebra::view, 312 132
millimitersToImagePosY pointerIsValid
puntoexe::imebra::view, 312 pun-
modalityVOILUT.cpp, 467 toexe::imebra::handlers::dataHandler,
modalityVOILUT.h, 468 202
MONOCHROME1ToMONOCHROME2.cpp, position
469 puntoexe::streamController, 342
MONOCHROME1ToMONOCHROME2.h, processDataBuffers
470 pun-
MONOCHROME1ToRGB.cpp, 471 toexe::imebra::transforms::transformBuffers,
MONOCHROME1ToRGB.h, 472 287
MONOCHROME2ToRGB.cpp, 473 ptr
MONOCHROME2ToRGB.h, 474 puntoexe::ptr, 334
MONOCHROME2ToYBRFULL.cpp, puntoexe, 67
475 puntoexe::baseObject, 85
MONOCHROME2ToYBRFULL.h, 476 baseObject, 87
months isReferencedOnce, 87
pun- puntoexe::baseStream, 89
toexe::imebra::handlers::dataHandlerStringAS,
read, 90
218 write, 90
puntoexe::charsetConversionException,
normalizeColorSpace 91
puntoexe::charsetConversionExceptionNoSupportedTable,
bufferExceptionUnknownType, 114
92 puntoexe::imebra::charsetsList::charsetListExceptionDiffDefault,
puntoexe::charsetConversionExceptionNoTable, 115
93 puntoexe::imebra::charsetsList::charsetsListException,
puntoexe::charsetConversionExceptionUtfSizeNotSupported,
116
94 puntoexe::imebra::codecs, 75
puntoexe::criticalSection, 95 puntoexe::imebra::codecs::codec, 117
∼criticalSection, 95 aboveMedium, 119
criticalSection, 95 belowMedium, 119
lock, 96 canHandleTransferSyntax, 119
tryLock, 96 createCodec, 119
unlock, 96 encapsulated, 120
puntoexe::exceptionInfo, 97 getImage, 120
exceptionInfo, 98 getMaxHighBit, 120
getMessage, 98 high, 119
m_exceptionMessage, 98 low, 119
m_exceptionType, 98 medium, 119
m_fileName, 98 quality, 119
m_functionName, 98 read, 121
m_lineNumber, 98 setImage, 121
puntoexe::exceptionsManager, 100 suggestAllocatedBits, 122
addExceptionInfo, 101 veryHigh, 119
clearExceptionInfo, 101 veryLow, 119
getExceptionInfo, 101 write, 123
getMessage, 102 puntoexe::imebra::codecs::codecException,
tExceptionInfoList, 101 124
puntoexe::huffmanTable, 103 codecException, 124
calcHuffmanCodesLength, 104 puntoexe::imebra::codecs::codecExceptionCorruptedFile,
calcHuffmanTables, 104 125
huffmanTable, 104 codecExceptionCorruptedFile, 125
incValueFreq, 105 puntoexe::imebra::codecs::codecExceptionWrongFormat,
readHuffmanCode, 105 126
removeLastCode, 105 codecExceptionWrongFormat, 126
reset, 105 puntoexe::imebra::codecs::codecExceptionWrongTransferSyntax,
writeHuffmanCode, 106 127
puntoexe::imebra, 71 codecExceptionWrongTransferSyn-
puntoexe::imebra::buffer, 107 tax, 127
buffer, 108, 109 puntoexe::imebra::codecs::codecFactory,
getBufferSizeBytes, 109 128
getCharsetsList, 109 getCodec, 129
getDataHandler, 110 getCodecFactory, 129
getDataHandlerRaw, 110 load, 129
getDataType, 111 registerCodec, 130
getStreamReader, 111 puntoexe::imebra::codecs::dicomCodec,
getStreamWriter, 111 131
setCharsetsList, 111 buildStream, 131
puntoexe::imebra::bufferException, 113 parseStream, 132
bufferException, 113 puntoexe::imebra::codecs::dicomCodecException,
puntoexe::imebra::bufferExceptionUnknownType, 134
114 dicomCodecException, 134
puntoexe::imebra::codecs::dicomCodecExceptionDepthLimitReached,
getFrameOffset, 161
135 getGroup, 161
dicomCodecExceptionDepthLim- getImage, 162
itReached, 135 getItemOffset, 162
puntoexe::imebra::codecs::jpegCodec, getLut, 162
136 getSequenceItem, 163
puntoexe::imebra::codecs::jpegCodecCannotHandleSyntax,
getSignedLong, 163
137 getStreamReader, 164
jpegCodecCannotHandleSyntax, getStreamWriter, 164
137 getString, 165
puntoexe::imebra::codecs::jpegCodecException, getTag, 165
138 getUnicodeString, 166
puntoexe::imebra::data, 139 getUnsignedLong, 166
appendDataSet, 140 getWaveform, 167
bufferExists, 140 setDouble, 167
deleteBuffer, 141 setGroup, 168
getBufferSize, 141 setImage, 168
getDataHandler, 141 setItemOffset, 169
getDataHandlerRaw, 142 setSignedLong, 169
getDataSet, 143 setString, 169
getDataType, 143 setUnicodeString, 170
getStreamReader, 143 setUnsignedLong, 170
getStreamWriter, 144 updateCharsetTag, 171
setDataSet, 144 updateTagsCharset, 171
puntoexe::imebra::dataCollection, 145 puntoexe::imebra::dataSetCorruptedOffsetTable,
getDataIterator, 145 172
puntoexe::imebra::dataCollectionIterator, dataSetCorruptedOffsetTable, 172
147 puntoexe::imebra::dataSetException, 173
getData, 148 puntoexe::imebra::dataSetExceptionDifferentFormat,
getId, 148 174
getOrder, 148 puntoexe::imebra::dataSetExceptionOldFormat,
incIterator, 149 175
isValid, 149 puntoexe::imebra::dataSetExceptionUnknownTransferSyntax,
reset, 149 176
puntoexe::imebra::dataGroup, 150 puntoexe::imebra::dataSetExceptionWrongFrame,
getDataHandler, 151 177
getDataHandlerRaw, 151 puntoexe::imebra::dataSetImageDoesntExist,
getDataType, 152 178
getStreamReader, 152 dataSetImageDoesntExist, 178
getStreamWriter, 153 puntoexe::imebra::dicomDictionary, 179
getTag, 153 getDicomDictionary, 180
puntoexe::imebra::dataSet, 154 getLongLength, 180
getDataHandler, 157 getMaxSize, 180
getDataHandlerRaw, 158 getTagName, 180
getDataType, 159 getTagType, 181
getDefaultDataType, 159 getWordSize, 181
getDouble, 159 isDataTypeValid, 181
getFirstAvailFrameBufferId, 160 puntoexe::imebra::dicomDir, 182
getFrameBufferId, 160 buildDataSet, 183
getFrameBufferIds, 160 dicomDir, 183
puntoexe::imebra::handlers::dataHandlerStringCS,
setLutValue, 243
222 puntoexe::imebra::lutException, 244
puntoexe::imebra::handlers::dataHandlerStringDS,
puntoexe::imebra::lutExceptionCorrupted,
223 245
puntoexe::imebra::handlers::dataHandlerStringIS,
puntoexe::imebra::lutExceptionWrongIndex,
224 246
puntoexe::imebra::handlers::dataHandlerStringPN,
puntoexe::imebra::transaction, 247
225 ∼transaction, 248
puntoexe::imebra::handlers::dataHandlerStringUnicode,
abort, 248
227 transaction, 248
puntoexe::imebra::handlers::dataHandlerTime,
puntoexe::imebra::transforms, 79
228 puntoexe::imebra::transforms::colorTransforms,
getUnicodeString, 228 82
setUnicodeString, 229 puntoexe::imebra::transforms::colorTransforms::colorTransform,
puntoexe::imebra::image, 230 249
bitDepth, 231 createColorTransform, 250
create, 232 getFinalColorSpace, 250
depthS16, 231 getInitialColorSpace, 250
depthS8, 231 puntoexe::imebra::transforms::colorTransforms::colorTransformsFactory,
depthU16, 231 251
depthU8, 231 canSubsample, 252
depthUnknown, 231 getColorTransformsFactory, 253
getChannelsNumber, 232 getNumberOfChannels, 253
getColorSpace, 232 getTransform, 253
getDataHandler, 232 isMonochrome, 254
getDepth, 233 isSubsampledX, 254
getHighBit, 233 isSubsampledY, 254
getSize, 233 makeSubsampled, 255
getSizeMm, 234 normalizeColorSpace, 255
setSizeMm, 234 puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExcept
puntoexe::imebra::imageException, 235 257
imageException, 235 puntoexe::imebra::transforms::colorTransforms::colorTransformsFactoryExcept
puntoexe::imebra::imageExceptionInvalidSize, 258
236 puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToMONOC
puntoexe::imebra::imageExceptionUnknownColorSpace, 259
237 puntoexe::imebra::transforms::colorTransforms::MONOCHROME1ToRGB,
puntoexe::imebra::imageExceptionUnknownDepth, 260
238 puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToMONOC
puntoexe::imebra::lut, 239 261
checkValidDataRange, 240 puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToRGB,
copyToInt32, 240 262
create, 240 puntoexe::imebra::transforms::colorTransforms::MONOCHROME2ToYBRFUL
fillHandlers, 241 263
getBits, 241 puntoexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB,
getDescription, 241 264
getFirstMapped, 241 setLut, 265
getSize, 242 puntoexe::imebra::transforms::colorTransforms::RGBToMONOCHROME2,
mappedValue, 242 266
mappedValueRev, 242 puntoexe::imebra::transforms::colorTransforms::RGBToPALETTECOLOR,
setLut, 242 267
puntoexe::imebra::transforms::colorTransforms::RGBToYBRFULL,
puntoexe::imebra::transforms::transformExceptionDataSetNotDefin
268 293
puntoexe::imebra::transforms::transformExceptionOutputImageNot
puntoexe::imebra::transforms::colorTransforms::RGBToYBRPARTIAL,
269 294
puntoexe::imebra::transforms::transformHighBit,
puntoexe::imebra::transforms::colorTransforms::YBRFULLToMONOCHROME2,
270 295
puntoexe::imebra::transforms::transformsChain,
puntoexe::imebra::transforms::colorTransforms::YBRFULLToRGB,
271 296
addTransform,
puntoexe::imebra::transforms::colorTransforms::YBRPARTIALToRGB, 297
272 endTransformsChain, 297
puntoexe::imebra::transforms::drawBitmap, isEmpty, 297
273 puntoexe::imebra::transforms::VOILUT,
declareBitmapType, 274 298
getOutputBitmap, 274 getCenterWidth, 299
getVOILUTDescription,
puntoexe::imebra::transforms::drawBitmapException, 299
276 getVOILUTId, 299
setCenterWidth, 300
puntoexe::imebra::transforms::drawBitmapExceptionDataSetNotDeclared,
277 setLUT, 300
setVOILUT, 300
puntoexe::imebra::transforms::drawBitmapExceptionImageNotDeclared,
278 puntoexe::imebra::transforms::VOILUTInverse,
302
puntoexe::imebra::transforms::drawBitmapExceptionInvalidAlignByte,
279 puntoexe::imebra::view, 303
draw, 306
puntoexe::imebra::transforms::drawBitmapExceptionInvalidArea,
280 drawBitmap, 306
drawCursorLine, 307
puntoexe::imebra::transforms::modalityVOILUT,
drawRectangle, 308
281
getBackgroundColor, 308
puntoexe::imebra::transforms::modalityVOILUTInverse,
getImage, 308
282
getImageRect, 309
puntoexe::imebra::transforms::transform,
getScreenDPI, 309
283
getScrollPosition, 309
declareDataSet, 284
getScrollSize, 310
declareInputImage, 284 getWindowSize, 310
declareOutputImage, 284 getZoomFactor, 310
doTransform, 285 imagePosToMillimitersX, 311
getDataSet, 285 imagePosToMillimitersY, 311
getInputImage, 285 invalidate, 311
getOutputImage, 285 isAutoZoom, 312
isEmpty, 286 millimitersToImagePosX, 312
puntoexe::imebra::transforms::transformBuffers, millimitersToImagePosY, 312
287 setBackgroundColor, 312
processDataBuffers, 287 setImage, 313
puntoexe::imebra::transforms::transformBuffersInPlace,
setScrollPosition, 313
289 setScrollSize, 313
puntoexe::imebra::transforms::transformBuffersInputOutput,
setZoomFactor, 314
290 setZoomRect, 314
puntoexe::imebra::transforms::transformException,
updateWindow, 315
291 view, 306
puntoexe::imebra::transforms::transformExceptionDataInputImageDefined,
windowPosToImageX, 315
292 windowPosToImageY, 315
setLUT puntoexe::imebra::directoryRecord,
pun- 193
toexe::imebra::transforms::VOILUT,setTypeString
300 puntoexe::imebra::directoryRecord,
setLut 193
puntoexe::imebra::lut, 242 setUnicodeString
pun- puntoexe::imebra::dataSet, 170
pun-
toexe::imebra::transforms::colorTransforms::PALETTECOLORToRGB,
265 toexe::imebra::handlers::dataHandler,
setLutValue 205
puntoexe::imebra::lut, 243 pun-
setNextRecord toexe::imebra::handlers::dataHandlerDate,
puntoexe::imebra::directoryRecord, 208
192 pun-
setPointer toexe::imebra::handlers::dataHandlerTime,
pun- 229
setUnsignedLong
toexe::imebra::handlers::dataHandler,
204 puntoexe::imebra::dataSet, 170
setReferencedRecord pun-
puntoexe::imebra::directoryRecord, toexe::imebra::handlers::dataHandler,
192 205
pun-
setScrollPosition
toexe::imebra::handlers::dataHandlerStringAS,
puntoexe::imebra::view, 313
220
setScrollSize
setUnsignedLongIncPointer
puntoexe::imebra::view, 313
pun-
setSignedLong
toexe::imebra::handlers::dataHandler,
puntoexe::imebra::dataSet, 169 206
pun- setVOILUT
toexe::imebra::handlers::dataHandler, pun-
204 toexe::imebra::transforms::VOILUT,
pun- 300
toexe::imebra::handlers::dataHandlerStringAS,
setZoomFactor
220 puntoexe::imebra::view, 314
setSignedLongIncPointer setZoomRect
pun- puntoexe::imebra::view, 314
toexe::imebra::handlers::dataHandler,
shouldTerminate
204 puntoexe::thread, 360
setSize size
pun- puntoexe::memory, 328
toexe::imebra::handlers::dataHandler,
skip
204 pun-
setSizeMm toexe::imebra::handlers::dataHandler,
puntoexe::imebra::image, 234 206
setString start
puntoexe::imebra::dataSet, 169 puntoexe::thread, 361
pun- stream.cpp, 488
toexe::imebra::handlers::dataHandler,
stream.h, 489
205 streamController
setType puntoexe::streamController, 341
puntoexe::imebra::codecs::codec,
123
puntoexe::streamWriter, 357
writeBits
puntoexe::streamWriter, 358
writeByte
puntoexe::streamWriter, 358
writeHuffmanCode
puntoexe::huffmanTable, 106
YBRFULLToMONOCHROME2.cpp,
517
YBRFULLToMONOCHROME2.h, 518
YBRFULLToRGB.cpp, 519
YBRFULLToRGB.h, 520
YBRPARTIALToRGB.cpp, 521
YBRPARTIALToRGB.h, 522
years
pun-
toexe::imebra::handlers::dataHandlerStringAS,
218
yield
puntoexe::thread, 361
zoomInOut
puntoexe::imebra::view, 316