136c38cbb29744e0b5390a38367e47c0c74287c2dmsarett/*
236c38cbb29744e0b5390a38367e47c0c74287c2dmsarett * Copyright 2011 Google Inc.
336c38cbb29744e0b5390a38367e47c0c74287c2dmsarett *
436c38cbb29744e0b5390a38367e47c0c74287c2dmsarett * Use of this source code is governed by a BSD-style license that can be
536c38cbb29744e0b5390a38367e47c0c74287c2dmsarett * found in the LICENSE file.
636c38cbb29744e0b5390a38367e47c0c74287c2dmsarett */
736c38cbb29744e0b5390a38367e47c0c74287c2dmsarett#include "gm.h"
833d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h"
936c38cbb29744e0b5390a38367e47c0c74287c2dmsarett#include "SkCanvas.h"
1036c38cbb29744e0b5390a38367e47c0c74287c2dmsarett#include "SkData.h"
1136c38cbb29744e0b5390a38367e47c0c74287c2dmsarett#include "SkImageEncoder.h"
1236c38cbb29744e0b5390a38367e47c0c74287c2dmsarett#include "Resources.h"
1336c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
1436c38cbb29744e0b5390a38367e47c0c74287c2dmsarettnamespace skiagm {
1536c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
1636c38cbb29744e0b5390a38367e47c0c74287c2dmsarettclass EncodeGM : public GM {
1736c38cbb29744e0b5390a38367e47c0c74287c2dmsarettpublic:
1836c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    EncodeGM() {}
1936c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
2036c38cbb29744e0b5390a38367e47c0c74287c2dmsarettprotected:
2136c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    SkString onShortName() override {
2236c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        return SkString("encode");
2336c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    }
2436c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
2536c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    SkISize onISize() override {
2636c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        return SkISize::Make(1024, 600);
2736c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    }
2836c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
2936c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    void onDraw(SkCanvas* canvas) override {
3036c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        SkBitmap orig;
3136c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        GetResourceAsBitmap("mandrill_512_q075.jpg", &orig);
32db6830162eca5b94e61d9825ec93306fc615d204Hal Canary        sk_sp<SkData> pngData(sk_tool_utils::EncodeImageToData(orig, SkEncodedImageFormat::kPNG, 100));
33db6830162eca5b94e61d9825ec93306fc615d204Hal Canary        sk_sp<SkData> jpegData(sk_tool_utils::EncodeImageToData(orig, SkEncodedImageFormat::kJPEG, 100));
3436c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
3536c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        sk_sp<SkImage> pngImage = SkImage::MakeFromEncoded(pngData);
3636c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        sk_sp<SkImage> jpegImage = SkImage::MakeFromEncoded(jpegData);
3736c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        canvas->drawImage(pngImage.get(), 0.0f, 0.0f);
3836c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        canvas->drawImage(jpegImage.get(), 512.0f, 0.0f);
3936c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
4036c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        const char text[] = "Images should look identical.";
4136c38cbb29744e0b5390a38367e47c0c74287c2dmsarett        canvas->drawText(text, sizeof(text) - 1, 450.0f, 550.0f, SkPaint());
4236c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    }
4336c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
4436c38cbb29744e0b5390a38367e47c0c74287c2dmsarettprivate:
4536c38cbb29744e0b5390a38367e47c0c74287c2dmsarett    typedef GM INHERITED;
4636c38cbb29744e0b5390a38367e47c0c74287c2dmsarett};
4736c38cbb29744e0b5390a38367e47c0c74287c2dmsarett
4836c38cbb29744e0b5390a38367e47c0c74287c2dmsarettDEF_GM( return new EncodeGM; )
4936c38cbb29744e0b5390a38367e47c0c74287c2dmsarett}
50