hunk.code_window: An object representing an [asset](#asset).
   ### `MediaLibrary.saveToLibraryAsync(localUri)`
   Saves the file at given `localUri` to the user's media library. On **iOS 11+**, it's possible to use this method without asking for `CAMERA_ROLL` permission, however then yours `Info.plist` should have `NSPhotoLibraryAddUsageDescription` key.
   #### Arguments
  
hunk.labels: keep keep keep keep replace keep keep keep
hunk.after_edit: Saves the file at given `localUri` to the user's media library. Unlike [`createAssetAsync()`](#medialibrarycreateassetasynclocaluri), this method doesn't return created asset.
   On **iOS 11+**, it's possible to use this method without asking for `CAMERA_ROLL` permission, however then yours `Info.plist` should have `NSPhotoLibraryAddUsageDescription` key.
  
hunk.file_path: docs/pages/versions/v38.0.0/sdk/media-library.md
hunk.type: replace
file: //---------------------------------------------------------------------------//
  // Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
  //
  // Distributed under the Boost Software License, Version 1.0
  // See accompanying file LICENSE_1_0.txt or copy at
  // http://www.boost.org/LICENSE_1_0.txt
  //
  // See http://boostorg.github.com/compute for more information.
  //---------------------------------------------------------------------------//
  
  #ifndef BOOST_COMPUTE_INTEROP_QT_QIMAGE_HPP
  #define BOOST_COMPUTE_INTEROP_QT_QIMAGE_HPP
  
  #include <boost/throw_exception.hpp>
  
  #include <boost/compute/command_queue.hpp>
  #include <boost/compute/exception/opencl_error.hpp>
  #include <boost/compute/image/image2d.hpp>
  #include <boost/compute/image/image_format.hpp>
  #include <boost/compute/utility/dim.hpp>
  
  #include <QImage>
  
  namespace boost {
  namespace compute {
  
  inline image_format qt_qimage_format_to_image_format(const QImage::Format &format)
  {
      if(format == QImage::Format_RGB32){
          return image_format(image_format::bgra, image_format::unorm_int8);
      }
  
      BOOST_THROW_EXCEPTION(opencl_error(CL_IMAGE_FORMAT_NOT_SUPPORTED));
  }
  
  inline QImage::Format qt_image_format_to_qimage_format(const image_format &format)
  {
      if(format == image_format(image_format::bgra, image_format::unorm_int8)){
          return QImage::Format_RGB32;
      }
  
      return QImage::Format_Invalid;
  }
  
  inline image_format qt_qimage_get_format(const QImage &image)
  {
      return qt_qimage_format_to_image_format(image.format());
  }
  
  inline void qt_copy_qimage_to_image2d(const QImage &qimage,
                                        image2d &image,
                                        command_queue &queue)
  {
      queue.enqueue_write_image(image, image.origin(), image.size(), qimage.constBits());
  }
  
  inline void qt_copy_image2d_to_qimage(const image2d &image,
                                        QImage &qimage,
                                        command_queue &queue)
  {
      queue.enqueue_read_image(
          image, dim(0, 0), dim(qimage.width(), qimage.height()), qimage.bits()
      );
  }
  
  } // end compute namespace
  } // end boost namespace
  
  #endif // BOOST_COMPUTE_INTEROP_QT_QIMAGE_HPP
  