aboutsummaryrefslogtreecommitdiff
path: root/src/osx/graphics/quartz/ImageFactory.cpp
blob: c59ff126c55a8f483f82b01a34af3bb6d0f5e9a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "cru/osx/graphics/quartz/ImageFactory.hpp"
#include "cru/osx/graphics/quartz/Convert.hpp"
#include "cru/osx/graphics/quartz/Image.hpp"
#include "cru/platform/graphics/Image.hpp"

#include <ImageIO/ImageIO.h>

namespace cru::platform::graphics::osx::quartz {
QuartzImageFactory::QuartzImageFactory(IGraphicsFactory* graphics_factory)
    : OsxQuartzResource(graphics_factory) {}

QuartzImageFactory::~QuartzImageFactory() {}

std::unique_ptr<IImage> QuartzImageFactory::DecodeFromStream(
    io::Stream* stream) {
  CGDataProviderRef data_provider = ConvertStreamToCGDataProvider(stream);
  CGImageSourceRef image_source =
      CGImageSourceCreateWithDataProvider(data_provider, nullptr);

  CGImageRef cg_image =
      CGImageSourceCreateImageAtIndex(image_source, 0, nullptr);

  QuartzImage* image =
      new QuartzImage(GetGraphicsFactory(), this, cg_image, true);

  CFRelease(cg_image);
  CGDataProviderRelease(data_provider);

  return std::unique_ptr<IImage>(image);
}
}  // namespace cru::platform::graphics::osx::quartz