Home | History | Annotate | Download | only in mac
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 #ifndef SkCGUtils_DEFINED
      9 #define SkCGUtils_DEFINED
     10 
     11 #include "SkSize.h"
     12 #include "SkImageInfo.h"
     13 
     14 #ifdef SK_BUILD_FOR_MAC
     15 #include <ApplicationServices/ApplicationServices.h>
     16 #endif
     17 
     18 #ifdef SK_BUILD_FOR_IOS
     19 #include <CoreGraphics/CoreGraphics.h>
     20 #endif
     21 
     22 class SkBitmap;
     23 class SkData;
     24 class SkStream;
     25 
     26 /**
     27  *  Given a CGImage, allocate an SkBitmap and copy the image's pixels into it. If scaleToFit is not
     28  *  null, use it to determine the size of the bitmap, and scale the image to fill the bitmap.
     29  *  Otherwise use the image's width/height.
     30  *
     31  *  On failure, return false, and leave bitmap unchanged.
     32  */
     33 SK_API bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef src, SkISize* scaleToFit = NULL);
     34 
     35 /**
     36  *  Copy the pixels from src into the memory specified by info/rowBytes/dstPixels. On failure,
     37  *  return false (e.g. ImageInfo incompatible with src).
     38  */
     39 SK_API bool SkCopyPixelsFromCGImage(const SkImageInfo& info, size_t rowBytes, void* dstPixels,
     40                                     CGImageRef src);
     41 
     42 /**
     43  *  Create an imageref from the specified bitmap using the specified colorspace.
     44  *  If space is NULL, then CGColorSpaceCreateDeviceRGB() is used.
     45  */
     46 SK_API CGImageRef SkCreateCGImageRefWithColorspace(const SkBitmap& bm,
     47                                                    CGColorSpaceRef space);
     48 
     49 /**
     50  *  Create an imageref from the specified bitmap using the colorspace returned
     51  *  by CGColorSpaceCreateDeviceRGB()
     52  */
     53 static inline CGImageRef SkCreateCGImageRef(const SkBitmap& bm) {
     54     return SkCreateCGImageRefWithColorspace(bm, NULL);
     55 }
     56 
     57 /**
     58  *  Draw the bitmap into the specified CG context. The bitmap will be converted
     59  *  to a CGImage using the generic RGB colorspace. (x,y) specifies the position
     60  *  of the top-left corner of the bitmap. The bitmap is converted using the
     61  *  colorspace returned by CGColorSpaceCreateDeviceRGB()
     62  */
     63 void SkCGDrawBitmap(CGContextRef, const SkBitmap&, float x, float y);
     64 
     65 bool SkPDFDocumentToBitmap(SkStream* stream, SkBitmap* output);
     66 
     67 /**
     68  *  Return a provider that wraps the specified stream. It will become an
     69  *  owner of the stream, so the caller must still manage its ownership.
     70  *
     71  *  To hand-off ownership of the stream to the provider, the caller must do
     72  *  something like the following:
     73  *
     74  *  SkStream* stream = new ...;
     75  *  CGDataProviderRef provider = SkStreamToDataProvider(stream);
     76  *  stream->unref();
     77  *
     78  *  Now when the provider is finally deleted, it will delete the stream.
     79  */
     80 CGDataProviderRef SkCreateDataProviderFromStream(SkStream*);
     81 
     82 CGDataProviderRef SkCreateDataProviderFromData(SkData*);
     83 
     84 #endif
     85