Home | History | Annotate | Download | only in animator
      1 /* libs/graphics/animator/SkSnapshot.cpp
      2 **
      3 ** Copyright 2006, The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 #include "SkTypes.h"
     19 
     20 #include "SkSnapshot.h"
     21 #include "SkAnimateMaker.h"
     22 #include "SkCanvas.h"
     23 #include "SkImageEncoder.h"
     24 
     25 #if SK_USE_CONDENSED_INFO == 0
     26 
     27 const SkMemberInfo SkSnapshot::fInfo[] = {
     28     SK_MEMBER(filename, String),
     29     SK_MEMBER(quality, Float),
     30     SK_MEMBER(sequence, Boolean),
     31     SK_MEMBER(type, BitmapEncoding)
     32 };
     33 
     34 #endif
     35 
     36 DEFINE_GET_MEMBER(SkSnapshot);
     37 
     38 SkSnapshot::SkSnapshot()
     39 {
     40     quality     = 100 * SK_Scalar1;
     41     type        = (SkImageEncoder::Type) -1;
     42     sequence    = false;
     43     fSeqVal     = 0;
     44 }
     45 
     46 #include "SkDevice.h"
     47 
     48 bool SkSnapshot::draw(SkAnimateMaker& maker) {
     49     SkASSERT(type >= 0);
     50     SkASSERT(filename.size() > 0);
     51     SkImageEncoder* encoder = SkImageEncoder::Create((SkImageEncoder::Type) type);
     52 
     53     SkString name(filename);
     54     if (sequence) {
     55         char num[4] = "000";
     56         num[0] = (char) (num[0] + fSeqVal / 100);
     57         num[1] = (char) (num[1] + fSeqVal / 10 % 10);
     58         num[2] = (char) (num[2] + fSeqVal % 10);
     59         name.append(num);
     60         if (++fSeqVal > 999)
     61             sequence = false;
     62     }
     63     if (type == SkImageEncoder::kJPEG_Type)
     64         name.append(".jpg");
     65     else if (type == SkImageEncoder::kPNG_Type)
     66         name.append(".png");
     67     encoder->encodeFile(name.c_str(),
     68                         maker.fCanvas->getDevice()->accessBitmap(false),
     69                         SkScalarFloor(quality));
     70     return false;
     71 }
     72 
     73