1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
80d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com#ifndef SkCGUtils_DEFINED
90d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com#define SkCGUtils_DEFINED
100d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com
1160b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org#include "SkSize.h"
1260b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org#include "SkImageInfo.h"
13f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
14f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#ifdef SK_BUILD_FOR_MAC
15ccb74eabccf19f66b6bf31f4acae89b62baa16c3yangsu@google.com#include <ApplicationServices/ApplicationServices.h>
16f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#endif
170d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com
18c134f394011372512f13e119df65204920f9bef6yangsu@google.com#ifdef SK_BUILD_FOR_IOS
19c134f394011372512f13e119df65204920f9bef6yangsu@google.com#include <CoreGraphics/CoreGraphics.h>
20c134f394011372512f13e119df65204920f9bef6yangsu@google.com#endif
21c134f394011372512f13e119df65204920f9bef6yangsu@google.com
220d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.comclass SkBitmap;
2312b1f19c1f5f4e9fe64053fee73ee72e2a301ec1reed@google.comclass SkData;
24292ade6625f2f3bed84afbe4d669613ebf3785f9reed@google.comclass SkStream;
250d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com
2638669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com/**
2760b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *  Given a CGImage, allocate an SkBitmap and copy the image's pixels into it. If scaleToFit is not
2860b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *  null, use it to determine the size of the bitmap, and scale the image to fill the bitmap.
2960b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *  Otherwise use the image's width/height.
3060b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *
3160b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *  On failure, return false, and leave bitmap unchanged.
3260b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org */
3360b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.orgSK_API bool SkCreateBitmapFromCGImage(SkBitmap* dst, CGImageRef src, SkISize* scaleToFit = NULL);
3460b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org
3560b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org/**
3660b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *  Copy the pixels from src into the memory specified by info/rowBytes/dstPixels. On failure,
3760b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org *  return false (e.g. ImageInfo incompatible with src).
3860b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org */
3960b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.orgSK_API bool SkCopyPixelsFromCGImage(const SkImageInfo& info, size_t rowBytes, void* dstPixels,
4060b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org                                    CGImageRef src);
4160b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org
4260b5dce19984a5165f6b2f1d6d477f5e8a940761commit-bot@chromium.org/**
4338669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com *  Create an imageref from the specified bitmap using the specified colorspace.
445a8a131d8a46424ae494041de2d748cdecea8ec9reed@google.com *  If space is NULL, then CGColorSpaceCreateDeviceRGB() is used.
4538669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com */
46368b4192001ccb3c14fd54f96fffe52fde545cb9thakis@chromium.orgSK_API CGImageRef SkCreateCGImageRefWithColorspace(const SkBitmap& bm,
47368b4192001ccb3c14fd54f96fffe52fde545cb9thakis@chromium.org                                                   CGColorSpaceRef space);
480d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com
4938669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com/**
505a8a131d8a46424ae494041de2d748cdecea8ec9reed@google.com *  Create an imageref from the specified bitmap using the colorspace returned
515a8a131d8a46424ae494041de2d748cdecea8ec9reed@google.com *  by CGColorSpaceCreateDeviceRGB()
5238669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com */
534aaee0aecdac6106763cd0428dfe0e589b1744ccreed@android.comstatic inline CGImageRef SkCreateCGImageRef(const SkBitmap& bm) {
5438669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com    return SkCreateCGImageRefWithColorspace(bm, NULL);
5538669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com}
5638669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com
5738669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com/**
5838669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com *  Draw the bitmap into the specified CG context. The bitmap will be converted
5938669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com *  to a CGImage using the generic RGB colorspace. (x,y) specifies the position
605a8a131d8a46424ae494041de2d748cdecea8ec9reed@google.com *  of the top-left corner of the bitmap. The bitmap is converted using the
615a8a131d8a46424ae494041de2d748cdecea8ec9reed@google.com *  colorspace returned by CGColorSpaceCreateDeviceRGB()
6238669c12c5ab784d5ad94eb2b26b89becac2ba12reed@android.com */
63f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comvoid SkCGDrawBitmap(CGContextRef, const SkBitmap&, float x, float y);
64f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com
65292ade6625f2f3bed84afbe4d669613ebf3785f9reed@google.combool SkPDFDocumentToBitmap(SkStream* stream, SkBitmap* output);
66292ade6625f2f3bed84afbe4d669613ebf3785f9reed@google.com
6761c22047dcc04be9fe7342f7e557996566f7f289reed@google.com/**
6861c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  Return a provider that wraps the specified stream. It will become an
6961c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  owner of the stream, so the caller must still manage its ownership.
7061c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *
7161c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  To hand-off ownership of the stream to the provider, the caller must do
7261c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  something like the following:
7361c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *
7461c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  SkStream* stream = new ...;
7561c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  CGDataProviderRef provider = SkStreamToDataProvider(stream);
7661c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  stream->unref();
7761c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *
7861c22047dcc04be9fe7342f7e557996566f7f289reed@google.com *  Now when the provider is finally deleted, it will delete the stream.
7961c22047dcc04be9fe7342f7e557996566f7f289reed@google.com */
8061c22047dcc04be9fe7342f7e557996566f7f289reed@google.comCGDataProviderRef SkCreateDataProviderFromStream(SkStream*);
8150b14a26dcb6d36f59987d00fd39897d1d5082bfreed@google.com
8250b14a26dcb6d36f59987d00fd39897d1d5082bfreed@google.comCGDataProviderRef SkCreateDataProviderFromData(SkData*);
8361c22047dcc04be9fe7342f7e557996566f7f289reed@google.com
840d55f1e73cbbf5456fb05108a0db1f33dafdae79reed@android.com#endif
85