1f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 2f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/* 3f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Copyright 2011 Google Inc. 4f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 5f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 6f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * found in the LICENSE file. 7f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 8f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifndef SkCGUtils_DEFINED 9f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SkCGUtils_DEFINED 10f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 11f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkTypes.h" 12f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 13f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifdef SK_BUILD_FOR_MAC 14f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include <ApplicationServices/ApplicationServices.h> 15f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 16f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 17f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifdef SK_BUILD_FOR_IOS 18f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include <CoreGraphics/CoreGraphics.h> 19f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 20f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 21f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkBitmap; 22f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkStream; 23f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 24f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/** 25f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Create an imageref from the specified bitmap using the specified colorspace. 26f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * If space is NULL, then CGColorSpaceCreateDeviceRGB() is used. 27f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 28f8cacf6b11e35785df8efb613b0c3592d535f603Derek SollenbergerSK_API CGImageRef SkCreateCGImageRefWithColorspace(const SkBitmap& bm, 29f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger CGColorSpaceRef space); 30f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 31f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/** 32f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Create an imageref from the specified bitmap using the colorspace returned 33f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * by CGColorSpaceCreateDeviceRGB() 34f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 35f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerstatic inline CGImageRef SkCreateCGImageRef(const SkBitmap& bm) { 36f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkCreateCGImageRefWithColorspace(bm, NULL); 37f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger} 38f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 39f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/** 40f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Draw the bitmap into the specified CG context. The bitmap will be converted 41f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * to a CGImage using the generic RGB colorspace. (x,y) specifies the position 42f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * of the top-left corner of the bitmap. The bitmap is converted using the 43f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * colorspace returned by CGColorSpaceCreateDeviceRGB() 44f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 45f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergervoid SkCGDrawBitmap(CGContextRef, const SkBitmap&, float x, float y); 46f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 47f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerbool SkPDFDocumentToBitmap(SkStream* stream, SkBitmap* output); 48f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 49f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/** 50f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Return a provider that wraps the specified stream. It will become an 51f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * owner of the stream, so the caller must still manage its ownership. 52f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 53f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * To hand-off ownership of the stream to the provider, the caller must do 54f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * something like the following: 55f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 56f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * SkStream* stream = new ...; 57f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * CGDataProviderRef provider = SkStreamToDataProvider(stream); 58f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * stream->unref(); 59f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 60f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Now when the provider is finally deleted, it will delete the stream. 61f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 62f8cacf6b11e35785df8efb613b0c3592d535f603Derek SollenbergerCGDataProviderRef SkCreateDataProviderFromStream(SkStream*); 63f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 64f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 65