C++程序  |  53行  |  1.4 KB

/*
 * Copyright 2013 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkBitmapScaler_DEFINED
#define SkBitmapScaler_DEFINED

#include "SkBitmap.h"
#include "SkConvolver.h"

/** \class SkBitmapScaler

    Provides the interface for high quality image resampling.
 */

class SK_API SkBitmapScaler {
public:
    enum ResizeMethod {
        RESIZE_BOX,
        RESIZE_TRIANGLE,
        RESIZE_LANCZOS3,
        RESIZE_HAMMING,
        RESIZE_MITCHELL,

        RESIZE_FirstMethod = RESIZE_BOX,
        RESIZE_LastMethod = RESIZE_MITCHELL,
    };

    /**
     *  Given already-allocated src and dst pixmaps, this will scale the src pixels using the
     *  specified resize-method and write the results into the pixels pointed to by dst.
     */
    static bool Resize(const SkPixmap& dst, const SkPixmap& src, ResizeMethod method);

    /**
     *  Helper function that manages allocating a bitmap to hold the dst pixels, and then calls
     *  the pixmap version of Resize.
     */
    static bool Resize(SkBitmap* result, const SkPixmap& src, ResizeMethod method,
                       int dest_width, int dest_height, SkBitmap::Allocator* = nullptr);

     /** Platforms can also optionally overwrite the convolution functions
        if we have SIMD versions of them.
      */

    static void PlatformConvolutionProcs(SkConvolutionProcs*);
};

#endif