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