+ ValEntry* photInt = CopyValEntry(0x0028,0x0004);
+ photInt->SetValue("RGB ");
+
+ if(PixelReadConverter->GetRGB())
+ {
+ PixelWriteConverter->SetReadData(PixelReadConverter->GetRGB(),
+ PixelReadConverter->GetRGBSize());
+ }
+ else // Raw data
+ {
+ PixelWriteConverter->SetReadData(PixelReadConverter->GetRaw(),
+ PixelReadConverter->GetRawSize());
+ }
+
+ BinEntry* pixel = CopyBinEntry(GetHeader()->GetGrPixel(),GetHeader()->GetNumPixel());
+ pixel->SetValue(GDCM_BINLOADED);
+ pixel->SetBinArea(PixelWriteConverter->GetData(),false);
+ pixel->SetLength(PixelWriteConverter->GetDataSize());
+
+ Archive->Push(spp);
+ Archive->Push(planConfig);
+ Archive->Push(photInt);
+ Archive->Push(pixel);
+
+ // Remove any LUT
+ Archive->Push(0x0028,0x1101);
+ Archive->Push(0x0028,0x1102);
+ Archive->Push(0x0028,0x1103);
+ Archive->Push(0x0028,0x1201);
+ Archive->Push(0x0028,0x1202);
+ Archive->Push(0x0028,0x1203);
+
+ // For old ACR-NEMA
+ // Thus, we have a RGB image and the bits allocated = 24 and
+ // samples per pixels = 1 (in the read file)
+ if(HeaderInternal->GetBitsAllocated()==24)
+ {
+ ValEntry* bitsAlloc = CopyValEntry(0x0028,0x0100);
+ bitsAlloc->SetValue("8 ");
+
+ ValEntry* bitsStored = CopyValEntry(0x0028,0x0101);
+ bitsStored->SetValue("8 ");
+
+ ValEntry* highBit = CopyValEntry(0x0028,0x0102);
+ highBit->SetValue("7 ");
+
+ Archive->Push(bitsAlloc);
+ Archive->Push(bitsStored);
+ Archive->Push(highBit);
+ }
+ }
+ else
+ {
+ SetWriteToRaw();
+ }
+}
+
+void File::RestoreWrite()
+{
+ Archive->Restore(0x0028,0x0002);
+ Archive->Restore(0x0028,0x0004);
+ Archive->Restore(0x0028,0x0006);
+ Archive->Restore(GetHeader()->GetGrPixel(),GetHeader()->GetNumPixel());
+
+ // For old ACR-NEMA (24 bits problem)
+ Archive->Restore(0x0028,0x0100);
+ Archive->Restore(0x0028,0x0101);
+ Archive->Restore(0x0028,0x0102);
+
+ // For the LUT
+ Archive->Restore(0x0028,0x1101);
+ Archive->Restore(0x0028,0x1102);
+ Archive->Restore(0x0028,0x1103);
+ Archive->Restore(0x0028,0x1201);
+ Archive->Restore(0x0028,0x1202);
+ Archive->Restore(0x0028,0x1203);
+}
+
+void File::SetWriteFileTypeToACR()
+{
+ Archive->Push(0x0002,0x0010);
+}
+
+void File::SetWriteFileTypeToExplicitVR()
+{
+ std::string ts = Util::DicomString(
+ Document::GetTransferSyntaxValue(ExplicitVRLittleEndian).c_str() );
+
+ ValEntry* tss = CopyValEntry(0x0002,0x0010);
+ tss->SetValue(ts);
+
+ Archive->Push(tss);
+}
+
+void File::SetWriteFileTypeToImplicitVR()
+{
+ std::string ts = Util::DicomString(
+ Document::GetTransferSyntaxValue(ImplicitVRLittleEndian).c_str() );
+
+ ValEntry* tss = CopyValEntry(0x0002,0x0010);
+ tss->SetValue(ts);
+
+ Archive->Push(tss);
+}
+
+void File::RestoreWriteFileType()
+{
+ Archive->Restore(0x0002,0x0010);
+}
+
+void File::SetWriteToLibido()
+{
+ ValEntry *oldRow = dynamic_cast<ValEntry *>
+ (HeaderInternal->GetDocEntryByNumber(0x0028, 0x0010));
+ ValEntry *oldCol = dynamic_cast<ValEntry *>
+ (HeaderInternal->GetDocEntryByNumber(0x0028, 0x0011));
+
+ if( oldRow && oldCol )
+ {
+ std::string rows, columns;
+
+ ValEntry *newRow=new ValEntry(oldRow->GetDictEntry());
+ ValEntry *newCol=new ValEntry(oldCol->GetDictEntry());
+
+ newRow->Copy(oldCol);
+ newCol->Copy(oldRow);
+
+ newRow->SetValue(oldCol->GetValue());
+ newCol->SetValue(oldRow->GetValue());
+
+ Archive->Push(newRow);
+ Archive->Push(newCol);
+ }
+
+ ValEntry *libidoCode = CopyValEntry(0x0008,0x0010);
+ libidoCode->SetValue("ACRNEMA_LIBIDO_1.1");
+ Archive->Push(libidoCode);
+}
+
+void File::SetWriteToNoLibido()
+{
+ ValEntry *recCode = dynamic_cast<ValEntry *>
+ (HeaderInternal->GetDocEntryByNumber(0x0008,0x0010));
+ if( recCode )
+ {
+ if( recCode->GetValue() == "ACRNEMA_LIBIDO_1.1" )
+ {
+ ValEntry *libidoCode = CopyValEntry(0x0008,0x0010);
+ libidoCode->SetValue("");
+ Archive->Push(libidoCode);
+ }
+ }
+}
+
+void File::RestoreWriteOfLibido()
+{
+ Archive->Restore(0x0028,0x0010);
+ Archive->Restore(0x0028,0x0011);
+ Archive->Restore(0x0008,0x0010);
+}
+
+ValEntry* File::CopyValEntry(uint16_t group,uint16_t element)
+{
+ DocEntry* oldE = HeaderInternal->GetDocEntryByNumber(group, element);
+ ValEntry* newE;
+
+ if(oldE)
+ {
+ newE = new ValEntry(oldE->GetDictEntry());
+ newE->Copy(oldE);
+ }
+ else
+ {
+ newE = GetHeader()->NewValEntryByNumber(group,element);
+ }
+
+ return(newE);