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