code: def convert_via_profile(self, data_np, order, inprof_name, outprof_name):
          
          # get rest of necessary conversion parameters
          to_intent = self.t_.get('icc_output_intent', 'perceptual')
          proofprof_name = self.t_.get('icc_proof_profile', None)
          proof_intent = self.t_.get('icc_proof_intent', 'perceptual')
          use_black_pt = self.t_.get('icc_black_point_compensation', False)
  
          try:
              rgbobj = RGBMap.RGBPlanes(data_np, order)
              arr_np = rgbobj.get_array('RGB')
  
              arr = rgb_cms.convert_profile_fromto(arr_np, inprof_name, outprof_name,
                                                   to_intent=to_intent,
                                                   proof_name=proofprof_name,
                                                   proof_intent=proof_intent,
                                                   use_black_pt=use_black_pt,
                                                   logger=self.logger)
              ri, gi, bi = rgbobj.get_order_indexes('RGB')
  
              out = data_np
              out[..., ri] = arr[..., 0]
              out[..., gi] = arr[..., 1]
              out[..., bi] = arr[..., 2]
  
              self.logger.debug("Converted from '%s' to '%s' profile" % (
                  inprof_name, outprof_name))
  
          except Exception as e:
              self.logger.warning("Error converting output from working profile: %s" % (str(e)))
              # TODO: maybe should have a traceback here
              self.logger.info("Output left unprofiled")
docs: Convert the given RGB data from the working ICC profile
          to the output profile in-place.
  
          Parameters
          ----------
          data_np : ndarray
              RGB image data to be displayed.
  
          order : str
              Order of channels in the data (e.g. "BGRA").
  
          inprof_name, outprof_name : str
              ICC profile names (see :func:`ginga.util.rgb_cms.get_profiles`).