title: images rgb jpg to dicom with dcm4che3
body: <p>I used the solution proposed by medPhys-pl, <a href="https://stackoverflow.com/questions/21087778/how-to-write-jpg-image-to-dicom-file-using-dcm4che3/">solution jpg to dicom with dcm4che3</a>.</p>
  
  <p>I try convert file jpg to file dicom. when jpg is monochrome my code is sucessful, however if the file jpg is RGB, the file dicom has colours changed regards to original image.</p>
  
  <p>Somebody knows the reason???</p>
  
  <p>thanks</p>
  
  <pre><code>    File fileJpg = new File(path + "tmp_" + numImagen + ".jpg");
      File fileDicomFinal = new File(path + "tmp_" + numImagen + ".dcm");
      File fileDicomOrig = new File(cabeceraOriginal);
      File fileDicomTipo = new File(cabeceraTipo);
  
      BufferedImage jpg = ImageIO.read(fileJpg);
  
      //Convert the image to a byte array
      DataBufferByte buff = (DataBufferByte) jpg.getData().getDataBuffer();
      byte[] buffbytes = buff.getData(0);
      byte[] b = new byte[5*buff.getData(0).length];
      for (int j = 0; j &lt; 5; j++) {
          System.arraycopy(buffbytes, 0, b, j*buffbytes.length, buffbytes.length);
      }
  
      //Copy a header 
      DicomInputStream dis = new DicomInputStream(fileDicomTipo);
      Attributes meta = dis.readFileMetaInformation();
      Attributes attribs = dis.readDataset(-1, Tag.PixelData);
      dis.close();
      DicomInputStream disOrig = new DicomInputStream(fileDicomOrig);
      Attributes attribsOrig = disOrig.readDataset(-1, Tag.PixelData);
      disOrig.close();
  
      //get properties of image
      int colorComponents = jpg.getColorModel().getNumColorComponents();
      int bitsPerPixel = jpg.getColorModel().getPixelSize();
      int bitsAllocated = (bitsPerPixel / colorComponents); 
      int samplesPerPixel = colorComponents; 
  
      //Change the rows and columns
      attribs.setString(Tag.SpecificCharacterSet, VR.CS, "ISO_IR 100");  
      attribs.setString(Tag.PhotometricInterpretation, VR.CS, samplesPerPixel == 3 ? "RGB" : "MONOCHROME2"); 
  
      attribs.setInt(Tag.SamplesPerPixel, VR.US, samplesPerPixel);           
      attribs.setInt(Tag.Rows, VR.US, jpg.getHeight());  
      attribs.setInt(Tag.Columns, VR.US, jpg.getWidth());  
      attribs.setInt(Tag.BitsAllocated, VR.US, bitsAllocated);  
      attribs.setInt(Tag.BitsStored, VR.US, bitsAllocated);  
      attribs.setInt(Tag.HighBit, VR.US, bitsAllocated-1);  
      attribs.setInt(Tag.PixelRepresentation, VR.US, 0); 
  
      /*Also, our Dicom header needs information about date and time of creation:*/
      attribs.setDate(Tag.InstanceCreationDate, VR.DA, new Date());  
      attribs.setDate(Tag.InstanceCreationTime, VR.TM, new Date());  
      /* Every Dicom file has a unique identifier. 
      * Here we’re generating study, series and Sop instances UIDs. 
      * You may want to modify these values, but you should to care about their uniqueness. 
      */
      attribs.setString(Tag.SeriesInstanceUID, VR.UI, UIDUtils.createUID();  
      attribs.setString(Tag.SOPInstanceUID, VR.UI, UIDUtils.createUID());  
      attribs.setString(Tag.StudyInstanceUID, VR.UI, UIDUtils.createUID());
      attribs.setString(Tag.AccessionNumber, VR.IS, attribsOrig.getString(Tag.AccessionNumber));
      attribs.setString(Tag.PatientName, VR.CS, attribsOrig.getString(Tag.PatientName));
      attribs.setString(Tag.InstitutionName, VR.CS, attribsOrig.getString(Tag.InstitutionName));
      attribs.setString(Tag.PatientID, VR.CS, attribsOrig.getString(Tag.PatientID));
      attribs.setString(Tag.PatientBirthDate, VR.DT, attribsOrig.getString(Tag.PatientBirthDate));
      attribs.setString(Tag.PatientSex, VR.CS, attribsOrig.getString(Tag.PatientSex));
      attribs.setString(Tag.OtherPatientIDs, VR.CS, attribsOrig.getString(Tag.OtherPatientIDs));
      attribs.setString(Tag.PatientAge, VR.AS, attribsOrig.getString(Tag.PatientAge));
      attribs.setString(Tag.AcquisitionDateTime, VR.DT, attribsOrig.getString(Tag.AcquisitionDateTime));
      attribs.setString(Tag.AcquisitionDate, VR.DT, attribsOrig.getString(Tag.AcquisitionDate));       
      attribs.setString(Tag.AcquisitionTime, VR.DT, attribsOrig.getString(Tag.AcquisitionTime));
      attribs.setString(Tag.StudyInstanceUID , VR.UI, attribsOrig.getString(Tag.StudyInstanceUID));
  
      //Write the file                
      attribs.setBytes(Tag.PixelData, VR.OW, b);
      DicomOutputStream dcmo = new DicomOutputStream(fileDicomFinal);
      dcmo.writeFileMetaInformation(meta);
      attribs.writeTo(dcmo);
      dcmo.close();
  </code></pre>