11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 The Android Open Source Project
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
9bb98807a9a02751ed2fcc98376f323ad93e15fa4Wei-Ta Chen#ifndef SkBitmapRegionDecoder_DEFINED
10bb98807a9a02751ed2fcc98376f323ad93e15fa4Wei-Ta Chen#define SkBitmapRegionDecoder_DEFINED
1197fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
1297fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen#include "SkBitmap.h"
1397fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen#include "SkRect.h"
1497fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen#include "SkImageDecoder.h"
156210a7c68844602ee390bcce61dbb637910a3c6bChih-Chung Chang#include "SkStream.h"
1697fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
17bb98807a9a02751ed2fcc98376f323ad93e15fa4Wei-Ta Chenclass SkBitmapRegionDecoder {
1897fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wenpublic:
196210a7c68844602ee390bcce61dbb637910a3c6bChih-Chung Chang    SkBitmapRegionDecoder(SkImageDecoder *decoder, SkStream *stream,
206210a7c68844602ee390bcce61dbb637910a3c6bChih-Chung Chang            int width, int height) {
2197fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen        fDecoder = decoder;
226210a7c68844602ee390bcce61dbb637910a3c6bChih-Chung Chang        fStream = stream;
2397fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen        fWidth = width;
2497fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen        fHeight = height;
2597fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    }
26bb98807a9a02751ed2fcc98376f323ad93e15fa4Wei-Ta Chen    virtual ~SkBitmapRegionDecoder() {
2797fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen        delete fDecoder;
286210a7c68844602ee390bcce61dbb637910a3c6bChih-Chung Chang        fStream->unref();
2997fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    }
3097fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
3197fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    virtual bool decodeRegion(SkBitmap* bitmap, SkIRect rect,
3297fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen                              SkBitmap::Config pref, int sampleSize);
3397fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
3497fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    virtual int getWidth() { return fWidth; }
3597fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    virtual int getHeight() { return fHeight; }
3697fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
3797fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    virtual SkImageDecoder* getDecoder() { return fDecoder; }
3897fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
3997fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wenprivate:
4097fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    SkImageDecoder *fDecoder;
416210a7c68844602ee390bcce61dbb637910a3c6bChih-Chung Chang    SkStream *fStream;
4297fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    int fWidth;
4397fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen    int fHeight;
4497fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen};
4597fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen
4697fa2e455b2040c99c5b6f3e3d2ad6c9b4062081Joseph Wen#endif
47