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