1d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com/*
2d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com * Copyright 2012 Google Inc.
3d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com *
4d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com * Use of this source code is governed by a BSD-style license that can be
5d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com * found in the LICENSE file.
6d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com */
7d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
8d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com#include "gm.h"
9bcbc1788b478b1e54079318ad073e8490aa66faetfarina
10bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "Resources.h"
11d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com#include "SkCanvas.h"
12d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com#include "SkImageDecoder.h"
13d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com#include "SkStream.h"
14d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
15d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.comnamespace skiagm {
16d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
17d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com/** Draw a CMYK encoded jpeg - libjpeg doesn't support CMYK->RGB
18d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    conversion so this tests Skia's internal processing
19d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com*/
20d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.comclass CMYKJpegGM : public GM {
21d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.compublic:
229f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    CMYKJpegGM() {}
239f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
249f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comprotected:
259f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    virtual void onOnceBeforeDraw() SK_OVERRIDE {
26d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        // parameters to the "decode" call
27d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        bool dither = false;
28d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
29bcbc1788b478b1e54079318ad073e8490aa66faetfarina        SkString resourcePath = GetResourcePath();
30bcbc1788b478b1e54079318ad073e8490aa66faetfarina        if (!resourcePath.endsWith("/") && !resourcePath.endsWith("\\")) {
31bcbc1788b478b1e54079318ad073e8490aa66faetfarina            resourcePath.append("/");
32d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        }
33d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
34bcbc1788b478b1e54079318ad073e8490aa66faetfarina        resourcePath.append("CMYK.jpg");
35d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
36bcbc1788b478b1e54079318ad073e8490aa66faetfarina        SkFILEStream stream(resourcePath.c_str());
37dc8e6e8503e08ad0c03f81d2624aa5d499dfe2bebungeman@google.com        if (!stream.isValid()) {
38dc8e6e8503e08ad0c03f81d2624aa5d499dfe2bebungeman@google.com            SkDebugf("Could not find CMYK.jpg, please set --resourcePath correctly.\n");
39dc8e6e8503e08ad0c03f81d2624aa5d499dfe2bebungeman@google.com            return;
40dc8e6e8503e08ad0c03f81d2624aa5d499dfe2bebungeman@google.com        }
41a5d3e77420621c912383c3b22e542d9413d68278skia.committer@gmail.com
42d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        SkImageDecoder* codec = SkImageDecoder::Factory(&stream);
43d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        if (codec) {
44d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com            stream.rewind();
45d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com            codec->setDitherImage(dither);
46bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed            codec->decode(&stream, &fBitmap, kN32_SkColorType, SkImageDecoder::kDecodePixels_Mode);
479f7520898ecb4d631479055e6c7af44e0ed44568scroggo@google.com            SkDELETE(codec);
48d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        }
49d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    }
50d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
51d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    virtual SkString onShortName() {
52d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        return SkString("cmykjpeg");
53d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    }
54d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
55d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    virtual SkISize onISize() {
56f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(640, 480);
57d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    }
58d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
59d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    virtual void onDraw(SkCanvas* canvas) {
60d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
61d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        canvas->translate(20*SK_Scalar1, 20*SK_Scalar1);
62d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com        canvas->drawBitmap(fBitmap, 0, 0);
63d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    }
64d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
65d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.comprivate:
66d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    SkBitmap fBitmap;
67d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
68d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com    typedef GM INHERITED;
69d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com};
70d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
71d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com//////////////////////////////////////////////////////////////////////////////
72d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
73d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.comstatic GM* MyFactory(void*) { return new CMYKJpegGM; }
74d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.comstatic GMRegistry reg(MyFactory);
75d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com
76d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5robertphillips@google.com}
77