+void File::SetWriteToRaw()
+{
+ if( HeaderInternal->GetNumberOfScalarComponents() == 3
+ && !HeaderInternal->HasLUT())
+ {
+ SetWriteToRGB();
+ }
+ else
+ {
+ ValEntry *photInt = CopyValEntry(0x0028,0x0004);
+ if(HeaderInternal->HasLUT())
+ {
+ photInt->SetValue("PALETTE COLOR ");
+ }
+ else
+ {
+ photInt->SetValue("MONOCHROME1 ");
+ }
+
+ 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(photInt);
+ Archive->Push(pixel);
+ }
+}
+
+void File::SetWriteToRGB()
+{
+ if(HeaderInternal->GetNumberOfScalarComponents()==3)
+ {
+ PixelReadConverter->BuildRGBImage();
+
+ ValEntry *spp = CopyValEntry(0x0028,0x0002);
+ spp->SetValue("3 ");
+
+ ValEntry *planConfig = CopyValEntry(0x0028,0x0006);
+ planConfig->SetValue("0 ");
+
+ 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(
+ Global::GetTS()->GetSpecialTransferSyntax(TS::ExplicitVRLittleEndian) );
+
+ ValEntry *tss = CopyValEntry(0x0002,0x0010);
+ tss->SetValue(ts);
+
+ Archive->Push(tss);
+}
+
+void File::SetWriteFileTypeToImplicitVR()
+{
+ std::string ts = Util::DicomString(
+ Global::GetTS()->GetSpecialTransferSyntax(TS::ImplicitVRLittleEndian) );
+
+ ValEntry *tss = CopyValEntry(0x0002,0x0010);
+ tss->SetValue(ts);
+
+ Archive->Push(tss);
+}
+
+void File::RestoreWriteFileType()
+{
+ Archive->Restore(0x0002,0x0010);
+}