+ // --------------------------------------------------------------
+ // Special Patch to allow gdcm to re-write ACR-LibIDO formated images
+ //
+ // if recognition code tells us we dealt with a LibIDO image
+ // we reproduce on disk the switch between lineNumber and columnNumber
+ // just before writting ...
+
+ /// \todo the best trick would be *change* the recognition code
+ /// but pb expected if user deals with, e.g. COMPLEX images
+
+ std::string rows, columns;
+ if ( HeaderInternal->GetFileType() == ACR_LIBIDO)
+ {
+ rows = HeaderInternal->GetEntryByNumber(0x0028, 0x0010);
+ columns = HeaderInternal->GetEntryByNumber(0x0028, 0x0011);
+
+ HeaderInternal->SetEntryByNumber(columns, 0x0028, 0x0010);
+ HeaderInternal->SetEntryByNumber(rows , 0x0028, 0x0011);
+ }
+ // ----------------- End of Special Patch ----------------
+
+ uint16_t grPixel = HeaderInternal->GetGrPixel();
+ uint16_t numPixel = HeaderInternal->GetNumPixel();;
+
+ DocEntry* PixelElement =
+ GetHeader()->GetDocEntryByNumber(grPixel, numPixel);
+
+ if ( PixelRead == 1 )
+ {
+ // we read pixel 'as is' (no tranformation LUT -> RGB)
+ PixelElement->SetLength( ImageDataSizeRaw );
+ }
+ else if ( PixelRead == 0 )
+ {
+ // we tranformed GrayLevel pixels + LUT into RGB Pixel
+ PixelElement->SetLength( ImageDataSize );
+ }
+
+ HeaderInternal->Write(fp1, type);
+
+ // --------------------------------------------------------------
+ // Special Patch to allow gdcm to re-write ACR-LibIDO formated images
+ //
+ // ...and we restore the Header to be Dicom Compliant again
+ // just after writting
+
+ if ( HeaderInternal->GetFileType() == ACR_LIBIDO )
+ {
+ HeaderInternal->SetEntryByNumber(rows , 0x0028, 0x0010);
+ HeaderInternal->SetEntryByNumber(columns, 0x0028, 0x0011);
+ }
+ // ----------------- End of Special Patch ----------------
+ fp1->close ();
+ delete fp1;
+
+ return true;
+}
+
+/**
+ * \brief Access to the underlying \ref PixelConverter RGBA LUT
+ */
+uint8_t* File::GetLutRGBA()
+{
+ return PixelConverter->GetLutRGBA();