diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/animator/SkSnapshot.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/animator/SkSnapshot.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,67 @@ + +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#include "SkTypes.h" + +#include "SkSnapshot.h" +#include "SkAnimateMaker.h" +#include "SkCanvas.h" +#include "SkImageEncoder.h" + +#if SK_USE_CONDENSED_INFO == 0 + +const SkMemberInfo SkSnapshot::fInfo[] = { + SK_MEMBER(filename, String), + SK_MEMBER(quality, Float), + SK_MEMBER(sequence, Boolean), + SK_MEMBER(type, BitmapEncoding) +}; + +#endif + +DEFINE_GET_MEMBER(SkSnapshot); + +SkSnapshot::SkSnapshot() +{ + quality = 100 * SK_Scalar1; + type = (SkImageEncoder::Type) -1; + sequence = false; + fSeqVal = 0; +} + +#include "SkDevice.h" + +bool SkSnapshot::draw(SkAnimateMaker& maker) { + SkASSERT(type >= 0); + SkASSERT(filename.size() > 0); + SkImageEncoder* encoder = SkImageEncoder::Create((SkImageEncoder::Type) type); + if (!encoder) { + return false; + } + SkAutoTDelete ad(encoder); + + SkString name(filename); + if (sequence) { + char num[4] = "000"; + num[0] = (char) (num[0] + fSeqVal / 100); + num[1] = (char) (num[1] + fSeqVal / 10 % 10); + num[2] = (char) (num[2] + fSeqVal % 10); + name.append(num); + if (++fSeqVal > 999) + sequence = false; + } + if (type == SkImageEncoder::kJPEG_Type) + name.append(".jpg"); + else if (type == SkImageEncoder::kPNG_Type) + name.append(".png"); + encoder->encodeFile(name.c_str(), + maker.fCanvas->getDevice()->accessBitmap(false), + SkScalarFloorToInt(quality)); + return false; +}