#### v.4.0.8 (TBD) #### v.4.0.7 (11/1/2020) * Bug fix: Not able to open deflated dicom file which contains squence (#1097) * Bug fix: DS VR type value ending with \0 fails to serialize in JsonDicomConverter (#1078) * Allow disabling validation in JsonDicomConverter * Bug fix: IPv6 issue in DesktopNetworkStream * Optimize DicomTag.GetHashCode() (#1088) * Bug fix: Prevent special characters in association requests from crashing Fellow Oak DICOM (#1104) * Fixes caching of pixel data in DicomImage when rendering the same image multithreaded. (#805) * Fix handling of MaximumPDULength. DicomServer always repeated the clients value of MaximumPDULength in AssociationAccepted-message instead of returning its own value. (#1084) * Bug fix: It's very slow to open deflated dicom file. (#1115) * Bug fix: DicomUID Storage Commitment Push Model SOP Class was mapped to wrng DicomStorageCategory (#1113) * Handle PresentationStates and StructuredReports when creating a DICOMDIR (#1045) * Allow conversion of integerString into integer if original string had decimal with trailing zeros * Bug fix: String decimals ending in . (ex. 10.) throw DicomValidationException even though they can be converted to decimal * Bug fix: FrameGeometry.PixelSpacingX and FrameGeometry.PixelSpacingY where wrong initialized. Now for clarity they are called PixelSpacingBetweenRows and PixelSpacingBetweenColumns. * Bug fix: Date (DA) and DateTime (DT) fields didn't support range in validation (#1105) #### v.4.0.6 (8/6/2020) * Update to DICOM Standard 2020b. * Handle N-Event requests in DicomClient (required for synchronous storage commitment) (#1001) * Bug fix: Fix DICOM Tag conversion for private tags for element numbers xxff (#1059) * ImplicitVRLittleEndian always added to presentation context by default causes other transfer syntax to not be accepted (#1048) * New interface IDicomNEventReportRequestProvider for DicomServer. This is necessary to handle synchronous storage commitment on server (#1055) * Bug fix: Fix the deserialization issue in JsonDicomConverter for NaN value in VR=FL (#1063) * Bug fix: IOException when reading/sending file > 2GB. (#1061) * Bug fix: DicomValidator ValidateLO issue, ESC is a valid character (#1043) * Bug fix: DicomValidation for UI when AddFile to DicomDirectory (#1053) * Bug fix: Exception occurred in Indexer of VOISequenceLUT Class (#1062) * Bug fix: Prevent DicomClient getting stuck when any Exception (except IOException) occurs while sending a PDU over the network (#1054) * Bug fix: Size of uncompressed YBR_FULL_422 images is calculated wrong (#645) * Bug fix: YBR_FULL_422 images should have a planar configuration value of zero (#1049) * When opening a DICOMDIR with invalid offsets, try to find the best matching records in a second run (#828) #### v.4.0.5 (5/18/2020) * Bug fix: DicomTags of ValueRepresentation LT have not been validated. * Bug fix: Unawaited task throws unhandled exception caught in finalizer thread when stopping Dicom Server. (#1013) * Bug fix: dependency of fo-dicom.ImageSharp nuget package was wrong. Now it also requires only netStandard1.3 (#1017) * Bug fix: Fixed freeze when reading SQ of length 0 (#1009) * Bug fix: DicomDictionary accessor thew exception on unknown keyword instead of returning null (#996) * Update version of ImageSharp to rc1 * Bug fix: Comparing instance of class DicomStatus with null returned wrong value (#975) * Bug fix: Overlay origin cannot be set correctly. (#1028) * Add encoding to JsonDicomConverter on LO, SH and PN (#1020) #### v.4.0.4 (1/17/2020) * New feature: asynchronous counterparts to IDicomCEchoProvider, IDicomCFindProvider, IDicomCStoreProvider, IDicomCMoveProvider, IDicomCGetProvider and IDicomNServiceProvider * Bug fix: Prevent SSL handshake freeze from blocking the TCP listener (#923) * disable validation when cloning/copying existing DicomDatasets. Exceptions has been thrown when anonymizing files that contain invalid content. * Bug fix: FileReadOption.SkipLargeTags caused that only parts of a FragmentSequece have been read, which then lead to further errors. Now the whole FragmentSequence is skipped if only one part of this sequence is skipped. * Bug fix: Exception when anonymizing private tags, where the value representation is not known. * Implementation of IImage with ImageSharp, which is pure managed and can be used on any operation system. (#693) * Add link to wiki entry in DicomCodecException (#948) * Bug fix: DicomDataset.TryGetString throws if the element is an empty number-based element (#932) * Bug fix: Some continuations in the new DicomClient were not properly marked with ConfigureAwait, which could cause trouble * Bug fix: VOI LUT was not applied correctly (#949) * Add ReferencedFilmSessionSequence in N-Create message of BasicFilmBox (#967) * Bug fix: Exception when cloning to Jpeg Process2_4 when parameters are set to null. #### v.4.0.3 (9/21/2019) * Bug fix: Exception when adding an element of VR UR/UT/LT/ST with empty value (#915) * Bug fix: Exception when opening a file with FileReadOption.SkipLargeTags (#893) * Bug fix: Do not open new associations on the existing TCP connection (#896) * Bug fix: Broken images when transcoding to JpegProces14 (#921) * New feature: Add the ability to enforce a maximum number of DICOM requests per association to the new DICOM client (#898) * Add AutoValidate property also to DicomDirectory class. * Add support for timeout detection on DICOM requests. Events on Requests and DicomClient are thrown in case of timeout (#666, #236) * New Option MaxPDULength in DicomServiceOption. * Rewrite SOP class extended negotiation support (#740) * Bug fix: extended negotiations have been accepted by default, but should be explicitly accepted (#900) * Bug fix: Send only PrintManagementMetaSopClassUid on AssociationRequest instead of all the various SopClassUids of the NCreate and NSet requests (#667) * Global static property DicomValidation.PerformValidation to turn off validation for every DicomDataset. * Bug fix: Prevent DICOM client from freezing when too many DICOM requests time out and async operations invoked is a low number #### v.4.0.2 (7/30/2019) * Bug fix: prevent resource leak when DesktopNetworkListener waits for new TCP clients * Updated to DICOM Dictionary 2019a (#724) * Add pure managed JpegLosses Decoder to DICOM.NetCore project * Upgraded native libraries to MSVC platform toolset v141 (VS 2017) (#814) * Replaced deprecated licenseUrl tags in NuGet specification files (#813) * Add validation of content when adding DICOM elements to DicomDataset. This validation is skipped when reading files or receiving data via network. * Be more prudent when releasing association after the linger timeout (#840) * A completely new DicomClient, under the namespace Dicom.Network.Client.DicomClient (beware of confusion with Dicom.Network.DicomClient!) * The intent is that the old Dicom.Network.DicomClient will disappear in the next major update, so the namespace confusion shouldn't last very long. * For now, both versions can be used side by side according to your needs. All of our unit tests cover both implementations. * The new Dicom.Network.Client.DicomClient sports the following characteristics: * Redesigned architecture using state pattern. This makes the DicomClient a lot more robust in various scenarios (abort while sending requests, disconnect while releasing association, etc) * Completely async from the very start * Full and graceful cancellation support using CancellationToken. Upon cancellation, no more requests will be sent, the association will be released and the connection closed gracefully. * One DicomClient instance per DICOM server. The host, port and other server related parameters are moved to the DicomClient constructor. * More hooks to react to the various states a DicomClient goes through. (e.g. when connecting, when lingering the association, etc.) * Bug Fix: Fixed wrong interpretation and application of LUT for PALETTE COLOR images (#817) * Bug Fix: Allow any SOP Class to be set as Affected SOP CLass in C-FIND requests (#808) * Bug Fix: Don't drop connection right after releasing an association (#839) * Bug Fix: Wait for release of previous association before opening a new one (#833) * Bug Fix: When a connection is still open but the association is already released, create a new association (#833) * Bug Fix: When adding datasets to a DicomDirectory where some patientNames have trailing ^, then they were not recognized as one patient (#765) * Bug Fix: Anonymizer throws exception on private tags (#771) * Bug Fix: Linear windowing wrong in corner cases (#816) * Bug Fix: Fix DicomClient getting stuck when sending one request fails completely (#848) * Added Modality LUT Sequence and VOI LUT Sequence functionality when generating a DICOM Image. * Bug Fix: Logging requests with very long private tags throws exception (#846) * Bug Fix: turn off validation when creating CFind-, CGet- or CMove-Requests, since there are no newly generated data included, but already existing UIDs have to be added there. (#860, #842) * Bug Fix: generation of DicomUID using obsolete method Generate("name") resulted in invalid UIDs. (#862) * Bug Fix: Disabling dataset validation for file meta information objects. (#859) * Bug Fix: JPEG 2000 decodes wrong colors in .NET Core (#850) * Enable secure DICOM Tls 1.0, 1.1 and 1.2 (#872) * Set text encoding of Json to UTF-8, as defined in dicom standard F.2 * Bug Fix: Photometric Interpretation updates on Transfer Syntax changes (#836) * Bug Fix: DicomOverlayData OriginX and OriginY were swapped * Bug Fix: Handle Json deserializing of empty values (#873) #### v.4.0.1 (3/13/2019) * change IFileReference and IByteBuffer to have offset of type long so that big files can be processed (#743) * internally identify dicom servers by port/ipadress combination instead of only port (#699) * DicomDirectory.AddFile returns a reference to the newly added patient-, study-, series- and instance-Record. * Update Json DS validation regex (#643) * Add option to DicomFile.Open how to deal with large tags (#617) * DicomFileMetaInformation now uses pre-existing SourceAET where possible * PixelData.GetMinMax now has 2 overloads, one that takes padding into account and one wihtout the padding parameter (#675) * string.ToUpper() is replaced by string.ToUpperInvariant() to prevent bad character conversion on turkish system * Fix detecting default windowing if a dataset contains several windows configurations (#741) * Fix bug in .net core when a image is both flipped in x and y direction (#721) * Pass through the timeout parameter from DicomClient.Send to the constructor of DesktopNetworkStream (#732) * Added appveyor.yml file for ci by this setting (#729) * Bug Fix : anonymized patient name is now encoded with same character set as the original Dicom. * add DicomUID.IsVolumeStorage. * Bug Fix : DICOM server may throw DicomDataException on association when non-standard transfer syntax was proposed (#749) * allow Query/Register/Unregister transfer syntax. * DicomCFindRequest should allow defnition of Query Retrieve Information Model (#708) * Bug fix : DicomUIDGenerator.GenerateDerivedFromUUID converts Guids incorrectly to the DICOM "2.25." + UUID format (#762) * Bug Fix : TryGetValue, TryGetValues, TryGetSingleValue should return false instead of throw exception. (#746) * Add methods to calculate localizer lines (#779) * Bug Fix : DicomPixelData.Create throws Exception if BitsAllocated >= 32 (#716) * Bug Fix: GetValues on empty element may throw ArgumentOutOfRangeException (#720) * Serilog for .NET Standard 1.3/.NET Core (#772) * Bug Fix : DicomServer does not close TcpClient/socket after client closed connection (#795) * Bug Fix : JsonDicomConverter should decode BulkDataURI element(#796) * Bug Fix: fix deserialization of Json when the VR-property is not on first position (#730) * DicomClient uses StrongBox to reduce memory consumption (#794) * Bug Fix: C-STORE request may hang. (#792) #### v.4.0.0 (9/24/2018) * Demonstrate and fix error in RLELossless Transfer Syntax Codec * Fixing 2 UWP Networking Bugs (#636, #637) * Add List of known Private UID's (#589) * DicomReader: Prevent premature exit from privateBadSequence when private sequence contains sub-sequence (#565 #626) * Saving a file with deflated transfer syntax occasionally fails (#621) * Anonymizer not removing Sequences (#610 #611) * Deprecate DicomClient.WaitForAssociation and provide association events (#605 #609) * Subclassing DicomServer (#602 #604) * Support CP-1066 (#597 #606) * DicomDataset.Add and .AddOrUpdate overloads with Encoding parameter (#596 #607) * Code generator support for anonymization data (#594 #595) * DicomServer to listen on IPv6 socket (#588 #604) * DicomAnonymizer blank DicomDate/DicomDateTime to DateTime.MinValue instead of empty value (#576 #593) * DicomAnonymizer ignores the PatientName and PatientID in the SecurityProfile (#575 #592) * Private group not added to tag when private tag item is added to dataset (#570 #577) * ReceivingApplicationEntityTitle and SendingApplicationEntityTitle omitted during Save (#563 #569) * Downgrade desktop libraries to framework version 4.5 (#561 #562) * Add support for Unity 2017.1 platform (#560 #585) * Handle fragmented OW pixel data when creating EncapsulatedPixelData for new pixel data (#553 #586) * DicomImage is not thread safe (#552 #582) * DicomUIDGenerator.Generate UID Collisions (Non-unique UIDs) (#546 #571) * Correct interpolation of rescaled overlay graphics (#545 #558) * Some getters of optional sequences do not account for missing sequence (#544 #572) * A-ASSOCIATE-AC PDU parsing incorrect (#543 #583 #590 #591) * DicomCFindRequest is unsuitable for "Search for Unified Procedure Step (C-FIND)" (#540 #580) * DicomClient proposes wrong presentation context in .NET core with codec that does not support 16 bit encoding (#538 #600) * Private tag is listed out or order (#535 #566) * JsonDicomConverter.ParseTag is very slow for keyword lookups (#533 #531) * DicomDictionary.GetEnumerator() is very slow (#532 #534) * DicomPixelData.BitsAllocated setter removed (#528 #564) * Complete list of transfer syntax fields from the DICOM Standard (#526 #599) * DicomClient.SendAsync will never return when certain non-transient exceptions are thrown (#525 #584) * CStore-SCU always adds a PC with LEExplicit and LEImplicit (#524 #541) * Added Maximum Clients Allowed to restrict connection to SCP (#523 #573) * Updated JPEG-LS to latest CharLS commit (#517) * Support for anonymization, deflated and compressed transfer syntaxes on Unity (#496) * Support for up to 16 bit JPEG 2000 codecs on Android, iOS, Mono and .NET Core (#496) * Added missing encodings for .NET Core (#481 #486) * Update to latest DICOM Standard 2018b (#480 #482 #536 #537 #555 #559 #619 #676) * Convert .NET Core projects to use VS 2017 .csproj project files (#470 #473) * Add TextWriterLogger (#461 #542) * Call to DicomServer.Stop does not remove all clients (#456 #464) * Repository re-organization (#445 #446 #447 #448 #451 #452 #455 #462 #463 #465 #467 #468 #469 #476 #477 #478) * Hololens support on Unity (#431 #556) * Deprecate Legacy class library (#415 #449) * Provide System.Drawing.Bitmap support for image rendering with .NET Core (#409 #450 #459) * Added optional parameter for use in extended DicomService (#348 #441) * Consistently asynchronous networking API (#331 #584) * Pass through unsupported user data during PDU parsing (#242 #443) * Remove warning messages during build (#33 #438) * Online and NuGet packages API documentation (#28 #459 #466 #574 #584) * Status code in respose got lost and mapped to an internally known status code (#616) * WinFormsImage may throw exception on Dispose or on GC (#634) * Fix StackOverflowException in Vector3D multiplication (#640) #### v.3.0.2 (4/20/2017) * DicomRejectReason enumerables should be parsed w.r.t. source (#516 #521) * Incorrect numerical value on RejectReason.ProtocolVersionNotSupported (#515 #520) * Add private creator to private tags when deserializing json (#512 #513) * Adding private tags implicitly uses wrong VR (#503 #504) * Add option in DicomServiceOptions for max PDVs per PDU (#502 #506) * DicomResponse.ErrorComment is always added in the DicomResponse.Status setter, even for successes (#501 #505) * DicomStatus.Lookup does not consider priority in matching (#499 #498) * DesktopNetworkListener can throw an exception which causes DicomServer to stop listening (#495 #519) * Cannot create DICOMDIR after anonymizing images (#488 #522) * Cannot parse dicom files if the last tag is a private sequence containing only empty sequence items (#487 #518) * If the connection is closed by the host, DicomClient will keep trying to send (#472 #489) * N-CREATE response constructor throws when request command does not contain SOP Instance UID (#484 #485) * Cannot render YBR_FULL/PARTIAL_422 with odd number of columns (#471 #479) * Dicom Server listener consumes large amount of memory if http request is sent to listener (#327 #509) #### v.3.0.1 (3/06/2017) * Add runtime directives to enable .NET Native builds for UWP (#424 #460) * YBR_FULL_422 JPEG Process 14 SV1 compressed image incorrectly decoded (#453 #454) #### v.3.0.0 (2/15/2017) * DICOM Anonymizer preview (#410 #437) * Client should not send if association rejected (#433 #434) * Deploy error for Unity based applications on Hololens (#431 #432) * Add method "AddOrUpdatePixelData" to the DicomDataset (#427 #430) * Adding too many presentation contexts causes null reference exception in DicomClient.Send (#426 #429) * Serialize to XML according to DICOM standard PS 3.19, Section A (#425) * Invalid reference in Universal targets build file (#422 #423) * Alpha component is zero for color images on UWP, .NET Core and Xamarin platforms (#421 #428) * Print SCP exception due to insufficient DicomDataset.AddOrUpdate refactoring (#353 #420) * Invalid decoding of JPEG baseline RGB images with managed JPEG codec (#417 #419) * DicomFile.Save throwing an exception in DotNetCore for macOS (#411 #413) * Added method GenerateUuidDerived (#408) * Padding argument not accounted for in some IPixelData.GetMinMax implementations (#406 #414) * Incorrect handling of padded buffer end in EvenLengthBuffer.GetByteRange (#405 #412) * Unhandled exception after error in JPEG native decoding (#394 #399) * DicomDataset.Get<T[]> on empty tag should not throw (#392 #398) * Efilm 2.1.2 seems to send funny presentation contexts, break on PDU.read (#391 #397) * Improved reliability in DicomClient.Send (#389 #407) * Cannot catch exceptions while doing C-STORE if I close my network connection (#385 #390) * Handle UN encode group lengths and missing last item delimitation tag (#378 #388) * Invalid handling of overlay data type, description, subtype and label (#375 #382) * Incorrect message logged when async ops are not available, but requested (#374 #381) * Fix get object for all DicomValueElement inheritors (#367 #368) * Handle parsing sequence items not associated with any sequence (#364 #383 #435 #436) * System Out Of Memory Exception when saving large DICOM files (#363 #384) * Null characters not trimmed from string values (#359 #380) * Corrected JPEG-LS encoding and JPEG decoding for YBR images (#358 #379 #416 #418) * Cannot override CreateCStoreReceiveStream due to private fields (#357 #386) * DicomClient multiple C-Store request cause exception when AsyncOps is not negotiated (#356 #400) * Enable registration of private UIDs (#355 #387) * DICOM Parse error - Stack empty (#342) * Invalid abort upon exception in P-Data-TF PDU processing (#341 #401) * Sufficient image creation when Bits Allocated does not match destination type size (#340 #350) * Some Dicom Printer refuse print requests from fo-dicom (#336) * DicomContentItem.Children() throws exception when there are no children (#332 #333) * Functional changes in Dataset.Add, rename of ChangeTransferSyntax (#330 #343) * Added support for more date/time formats (#328 #352) * Exception if Storage Commitment N-Event Report response does not contain EventID tag (#323 #329) * ImageDisposableBase implicit destructor missing (#322 #326) * Dicom Response Message should be sent using the same Presentation Context in the Request (#321) * DicomDataset.Contains(DicomTag tag) matches on object, will not find private tags (#319 #351) * Add DICOM VR Codes as constants (#315) * DicomClient should be able to C-STORE non-Part 10 DICOM files (#306 #307) * Incorrect dependency in fo-dicom.Universal.nuspec (#300 #301) * GetDateTime method does not handle missing date and time tags (#299 #302) * Print SCP sample reports exception due to missing ActionTypeID in N-ACTION response (#298 #308) * Red and Blue bytes swapped in color images on iOS (#290 #291) * Support creating DS Value elements from string and IByteBuffer (#288) * Pixel Data not null-padded to even length (#284 #286) * Merge core and platform assemblies (#280 #283) * ChangeTransferSyntax throws an exception (J2k 16-bit -> Jpeg Lossy P 4) (#277 #281) * Merge DicomUID partial files (#268 #270) * Wrong description for some tags (#266 #271) * DicomFileMetaInformation overly intrusive (#265 #285) * Type 3 property getters in DicomFileMetaInformation throw when tag not defined (#262 #264) * Invalid DicomDateTime output format (#261 #269) * NLog Formatted Logging Failing (#258 #260) * .NET Core Library Build Request (#256 #294 #296 #297 #310 #311 #325 #334) * Adaptations for fo-dicom on Unity platform (#251 #252 #253 #255 #257 #263 #287 #289 #292 #293) * Log4net event logging config not working with AssemblyInfo.cs XMLConfigurator (#244 #248) * Implement SOP Class Extended Negotiation (#241 #243 #304 #305) * DicomClient.Send DicomAssociationRejectedException not working (#239 #249) * Dicom.Platform.rd.xml file should be included as Embedded Resource (#237 #247) * DicomIntegerString.Get<T>() throws for enums and non-int value types (#231 #212 #226) * Upgrade dictionary to latest DICOM version 2016e (#229 #233 #245 #246 #317 #318 #360 #362 #372 #373) * Deflate Transfersyntax (#227 #259) * Use an editorconfig-file (#216 #215) * Upgrade to Visual Studio 2015 toolset (#214 #217) * Limited debug info for DicomDataset (#210 #211) * Allow specifying AbstractSyntax distinct from RequestedSOPClassUID (#208 #209) * Separate NuGet packages for all supported platforms (#206 #207 #275 #282) * Support more date-time parser formats (#205) * DicomDecimalString constructor fails with decimals if CurrentCulture has decimal commas (#202 #203) * Add VR Other Long (OL) (#201 #232) * Improved reliability in network operations (#199 #234 #312 #314 #316 #324) * If DicomServer already running, get instance of them (#191 #250) * Implement JSON serialization and deserialization of DICOM objects (#182 #186) * Open and save DicomDirectory to Stream (#181 #235) * Implement C-GET support (#180 #309) * Exposing network infos (ip and port) in association (#173 #225 #377) * Consider implementing DicomDataset.Clone() as "DeepClone" (#153 #313) * Image compression/decompression for Mono and Xamarin (#128 #279 #295) #### v2.0.2 (2/15/2016) * "Index was outside the bounds of the array" in PrecalculatedLUT indexer (#219 #221) * DicomReader reads past end of file if empty private sequence is last attribute in dataset (#220 #222) * DicomReader reads past end of file if first private sequence item is zero length (#223 #224) #### v2.0.1 (1/22/2016) * DICOM CP-246 not handled correctly in DicomReader (#177 #192) * Fix for #64 breaks parsing of valid datasets (#178 #184 #194) * Invalid VR in explicit dataset leads to 'silent' stop (#179 #196) * DicomDictionary.UnknownTag missing new VRs OD, UC and UR (#183 #185) * DicomPixelData.Create is broken for signed pixel data with BitsAllocated != BitsStored (#187 #189) * CompositeByteBuffer ArgumentException (#195 #198) #### v2.0.0 (1/14/2016) * Removed Modality Dicom Tag in Study Request (#166) * Checking for valid Window Center and Window Width values before using in GrayscaleRenderOptions (#161 #163) * Initialize managers automatically via reflection (#148 #149) * Message Command Field Priority invalid for C-ECHO and all DIMSE-N Requests (#141 #143) * Overlay data error corrections (#110 #138 #140) * Report status for additional presentation contexts (#137 #139) * Extended stop parsing functionality with support e.g. for sequence depth (#136 #142) * Handle simultaneous use of explicit sequence length and sequence delimitation item (#64 #135) * Parse error when encapsulated pixel data appears inside sequence item (#133 #134) * Universal Windows Platform library with networking, imaging and transcoding capability (#118 #124 #125 #126 #132) * Improved exception reporting for NLog (#121 #122) * MetroLog connector is Portable Class Library (#119 #120) * Fix of concurrency bugs in DicomDictionary (#114 #115 #151 #152) * Xamarin Android platform library with imaging cabability (#113 #117) * Xamarin iOS platform library with imaging cabability (#111 #112) * Portable Core and platform-specific assemblies, including basic Mono implementation (#13 #93 #94 #60 #109) * Network abstraction layer (#86 #106 #156 #159 #160 #157 #164 #158 #165 #167 #175) * Transcoder abstraction layer (#102 #105) * Synchronized LogManager API with other managers (#103 #104) * Image abstraction layer (#83 #85 #92 #101 #144 #145 #150) * I/O abstraction layer (#69 #78 #97 #100) * Provide Task Asynchronous Pattern (async/await) for file I/O and network operations (#65 #90 #96 #98 #99 #107 #116 #130 #131) * Provide NullLogger for disabled logging (#89 #91) * Improved NuGet installation procedure for codec assemblies (#87 #88 #123) * DICOM Dump can ignore private dictionary (#84) * API for applying color LUT on grayscale image (#79 #81 #146 #147) * Log4Net connector and NuGet package (#76 #77) * JPEG, JPEG-LS and JPEG2000 source code updated to latest applicable version (#74 #75) * Reverted memory mapped file implementation for image loading (#71 #72 #73) * MetroLog connector and NuGet package (#59 #68) #### v1.1.0 (8/10/2015) * Enable configuration of default encoding in the DicomDatasetReaderObserver (#54) * DicomDataset.Add(DicomTag, ...) method does not support multi-valued LO, PN, SH and UI tags (#51) * Explicit VR file parsing failures due to strictness (#47) * Overlay scaling in WPF images (#46) * Prevent non-socket related exceptions from being swallowed (#45) * Codec loading - add logging and default the search filter wildcard (#41) * Use memory mapped file buffer to improve large image reading (#17) * Improved reliability in search for native codec assemblies (#14) * Consistent handling of Get<T> default values (#10) * DICOM dictionary (tags and UIDs) updated to version 2015c (#9, #44) * UC, UR and OD value representations added (#9, #48) * Serilog support added; NLog and Serilog loggers moved to separate assemblies (#8, #34) * Corrected Color32.B getter (#7) * Upgraded to .NET 4.5 and C/C++ toolset v120 (#4) * Use UTF-8 encoding where appropriate (#2, #20, #21) * Fixed JPEG Codec memory corruption when encoding decoding on the same process for long period (#1) #### v1.0.38 (withdrawn) * Fix OW swap for single byte images * Better handling of long duration and aborted connections * Many imported extensions and bug fixes! #### v1.0.37 (2/19/2014) * Add DICOM Compare tool to project * Add support for disabling TCP Nagle algorithm * Better handling of aborted connections * Fix some UID values containing encoding characters * Fix extraction of embedded overlays * Utility methods for calculating window/level * Use number keys to change W/L calculation mode in dump utility * Use O key to show/hide overlays in dump utility * Fix byte swapping for Implicit VR single byte images #### v1.0.36 (8/6/2013) * Fix bug sorting private tags * Ability to add private tags to dataset * Better handling of improperly encoded private sequences * Fix bug adding presentation contexts from requests * Fix typo in N-Set response handler #### v1.0.35 (7/5/2013) * Fix bug adding presentation contexts with Implicit Little Endian syntax * Add option to use the remote AE Title as the logger name * Miscellaneous improvements and fixes #### v1.0.34 (6/27/2013) * Fix bug returning default value for zero length elements * Fix exception when disposing DicomDirectory * Fix menu bug in DICOM Dump utility when changing syntax to JPEG Lossless * Fix bug matching private DICOM tags * Add classes for basic structured report creation * Ability to browse multiframe images in DICOM Dump utility * Ability to recover when parsing invalid sequences * Ability to parse improperly encoded private sequences #### v1.0.33 (4/28/2013) * Add logging abstraction layer to remove runtime dependency on NLog * Fix bug reading duplicate entries in DICOM dictionary * Fix bug storing AT values * Fix bug sorting private DICOM tags * Fix bug using custom DicomWriteOptions #### v1.0.32 (3/12/2013) * DICOM Media example by Hesham Desouky * Move DicomFileScanner to Dicom.Media namespace * Add WriteToConsole logging extension method * Increase line length of dataset logging extension methods * Fix reading of sequences in DICOMDIR files (Hesham Desouky) * Improve rendering performance by precalculating grayscale LUT * Ability to render single-bit images * Fix hash code implementation for private tags * Miscellaneous improvements and fixes #### v1.0.31 (1/13/2013) * Improved portability and fewer compiler warnings (Anders Gustafsson) * Ensure frame buffers created by codecs have even length * Import DicomFileScanner from mDCM * Ability to save datasets and images in DICOM Dump utility * Ability to change tranfer syntax in DICOM Dump utility * Fix loss of embedded overlay data during compression * Fix rendering of big endian images * Miscellaneous improvements and fixes #### v1.0.30 (1/1/2013) * Fix bug rescaling DicomImage (Mahesh Dubey) * Add rules for matching and transforming DICOM datasets * Miscellaneous improvements and fixes #### v1.0.29 (12/22/2012) * Minor modifications to facilitate library porting to Windows Store apps (Anders Gustafsson) * Convert unit tests to use MS Unit Testing framework * Move DICOMDIR classes back to Dicom.Media namespace * Change DicomDirectory Open/Save methods to be consistent with DicomFile usage * Fix bug decoding single frame from a multiframe image (Mahesh Dubey) #### v1.0.28 (12/12/2012) * Display exception message in DICOM Dump for image rendering errors * Remove serialization members * Fix bug where frame is not added to OtherWordPixelData (Mahesh Dubey) * Fix bug where exception is not thrown for out of range frame numbers in GetFrame() (Mahesh Dubey) * Fix bug where internal transfer syntax is not set when transcoding file (Mahesh Dubey) * Add request/response classes for DICOM Normalized services * Change DicomCStoreRequest constructor to use SOP Class/Instance UIDs from dataset instead of FMI * Experimental support for DICOM directory files (Hesham Desouky) #### v1.0.27 (10/30/2012) * Ensure that file handles are closed after opening or saving DICOM file * Add ability to move file pointed to by FileReference * Fix window/level settings not being applied to rendered DicomImage * Fix processing order of received DIMSE responses * Process P-Data-TF PDUs on ThreadPool * Temporary fix for rendering JPEG compressed YBR images * Fix Async Ops window for associations where it is not negotiated * Fix bug reading Palette Color LUT with implicit length * Support decompression and rendering of JPEG Process 2 images * Enable modification of Window/Level in DicomImage #### v1.0.26 (10/19/2012) * Advanced DIMSE logging options for DicomService base class * Advanced configuration options for P-Data-TF PDU buffer lengths * Fix bug where final PDV may not be written to P-Data-TF PDU * Fix bug reading DIMSE datasets from network #### v1.0.25 (10/18/2012) * Fix min/max pixel value calculation for unsigned 32-bit pixel values * Fix collection modified exception when calculating group lengths * Better handling of null values when adding elements to dataset * Fix default values when accessing SS/US element values (Anders Gustafsson, Cureos AB) * Fix decoding of JPEG2000 images with signed pixel data (Mahesh Dubey) * Ability to decompress single frame from dataset (Mahesh Dubey) * Use ThreadPoolQueue to process related response messages in order #### v1.0.24 (10/01/2012) * Change the default presentation context transfer syntax acceptance behavior to prefer the SCU proposed order * Reject all presentation contexts that have not already been accepted or rejected when sending association accept * Add finalizers to temp file classes to catch files not deleted at application exit * Remove Exists() method from DicomDataset (duplicates functionality of Contains()) * Extension methods for recalculating and removing group length elements * Force calculation of group lengths when writing File Meta Info and Command datasets * Fix exception when attempting to display ROI overlays * Add ability to extract embedded overlays from pixel data * Detect incorrect transfer syntax in file meta info * Add support for reading and displaying GE Private Implicit VR Big Endian syntax #### v1.0.23 (09/26/2012) * Fix W/L calculation creating negative window width * Round VOI LUT values instead of casting away fraction * Fix bug reading signed pixel data from buffer * Fix encoding of JPEG2000 images with signed pixel data * Throttle queueing of PDUs to prevent out of memory errors for very large datasets * Better management of PDU buffer memory * Better handling for irregular specific character sets * Support displaying images without specified photometric interpretation * Ability to read files without preamble or file meta information (including ACR-NEMA) #### v1.0.22 (09/25/2012) * Add Offending Element tags to C-Move response output * Add exception handling for C-Store requests with unparsable datasets * Handle ObjectDisposedExceptions in network operations * Fix transcoding between uncompressed transfer syntaxes * Don't parse values for IS and DS elements if returning string types * Add AMICAS private tags (AMICAS0) to private dictionary * Add support for 32-bit pixel data (Anders Gustafsson, Cureos AB) * Better handling of default item in Get<> method (Anders Gustafsson, Cureos AB) * Support opening DicomFile from Stream (Anders Gustafsson, Cureos AB) * Add support SIGMOID VOI LUT function * Better handling of size and position of image display window in DICOM Dump * Fix calculation of W/L from smallest/largest pixel value elements * Fix viewing of images with bits allocated == 16 and bits stored == 8 * Add support for image scaling in DicomImage * Use library to scale images before displaying in DICOM Dump * Calculate W/L from pixel data values if no defaults are available * Add ability to Get<> Int32 values from US/SS elements * Add ability to Get<> DicomVR and IByteBuffer from elements * Add ability to Get<> byte[] from elements * Add ability to render basic PALETTE COLOR images * Fix unnecessary byte swap for 8-bit pixel data stored in OW * Add DicomFileException to allow better chance of recovery from parse errors * Add maximum PDU length to association output * Fix major bug in writing PDataTF PDUs; improvements in performance and memory usage * Add ability to propose additional transfer syntaxes in C-Store request #### v1.0.21 (09/14/2012) * Add connection close event and socket error handlers to DicomService * Fix C-Store SCP example's constructor not passing logger #### v1.0.20 (09/13/2012) * Fix exception in DicomClient when releasing association #### v1.0.19 (09/13/2012) * Force passing of Logger to DicomService constructor (may be null) #### v1.0.18 (09/13/2012) * Print Offending Element values when outputing request to log * Add ability to pass custom logger to DicomService based classes #### v1.0.17 (09/12/2012) * Check overlay group before attempting to load overlay data * Add ability to copy value column to clipboard in DICOM Dump * Fix DicomClient linger timeout and add release timeout #### v1.0.16 (09/11/2012) * Fix decompression of JPEG Baseline Process 1 images * Fix conversion of YBR to RGB in JPEG compressed images * Add ability to handle encapsulated OW pixel data * Better handling of grayscale images without Window/Level in dataset #### v1.0.15 (09/06/2012) * Add ability to store user state object in DicomService based classes * Add ability to store user state object in DicomClient * Fix handling of UIDs in DicomCFindRequest * Fix comparison of private DicomTags * Add shortcut constructor for private DicomTags * Handle null DicomDateRange in DicomDataset.Add() * Modality Worklist C-Find helper method #### v1.0.14 (09/05/2012) * Fix bug in DicomDatasetReaderObserver handling zero length Specific Character Set elements * Fix bug in DICOM Dump when displaying zero length UIDs * Load implementation version from assembly info #### v1.0.13 (09/04/2012) * Add ability for library to create and manage temp files * User state object for DIMSE requests and responses * Fix reading of elements with unknown dictionary VR (Justin Wake) * Fix handling of UIDs in DicomCMoveRequest (Justin Wake) * Add version to file meta information * Add support for multiframe images in DicomImage #### v1.0.12 (08/27/2012) * Add private dictionary to assembly * Fix parsing errors when reading private dictionaries * Fix reading of private tags * Miscellaneous enhancements #### v1.0.11 (08/23/2012) * Accept unknown transfer syntaxes * Add ability to write DICOM dataset to string #### v1.0.10 (08/13/2012) * Fix bug preloading dictionary from another assembly (Mahesh Dubey) * Add name of UID to DICOM Dump elements * Better error handling in GetDateTime method * Persistent temporary file remover #### v1.0.9 (08/02/2012) * Parsing of Attribute Tag element type * Fix bug displaying compressed images * Add codec libraries as references to DICOM Dump utility * Fix bug writing private sequence lengths * Fix stack overflow when reading datasets with lots of sequences * Fix big endian pixel data being swapped twice #### v1.0.7 (07/26/2012) * Fix exception when accessing overlay data * Fix parsing of multi-value string elements * Add option to display image in DICOM Dump utility * Fix C-Store request from Conquest causing exception #### v1.0.6 (07/24/2012) * Don't throw exception for invalid UID characters * Allow casting of OB & UN elements to value types #### v1.0.5 (07/22/2012) * Bug fixes * DICOM Dump example project #### v1.0.4 (07/18/2012) * Make logger instance protected in DicomService * Lock DICOM dictionary while loading * Throw exception if no DICOM dictionary entry is found while adding element to dataset * Fix bug where status is not being set in DIMSE response * Fix bug in C-Store SCP where file is inaccessible * Add C-Store SCP example project #### v1.0.3 (07/11/2012) * Fix parsing of explicit length sequences #### v1.0.2 (07/07/2012) * Image rendering * Don't create offset table for datasets over 4Gb * Regenerate dictionary and tags to include grouped elements such as overlays * Fix bug in ByteBufferEnumerator #### v1.0.1 (06/22/2012) * Initial public release